汇编语言程序设计
一 操作码和操作数
1 操作码
指令执行的操作(加减,传送)
2 操作数
指令操作的数据
mov 操作码用于数据传送,功能,将数据从一个位置传送到另一个位置
mov dest,src ; 相当于c语言的赋值语句 dest = src
src 表示要传送的数据或者数据所在的位置
dest 表示数据将要传送到的位置
将寄存器ebx传送到eax 的指令
mov eax,ebx
3 语句格式
执行性语句: 表达处理器指令的语句,对应一条指令代码
标号:处理器指令助记符 操作数,操作数
说明性语句:表达汇编程序命令的语句,主要说明源程序如何汇编,变量如何定义,过程如何设置
名字 伪指令助记符 参数,参数,.......
- 冒号前的标号表示处理器指令在主存里面的位置,主要用来指示分治,循环等程序的目的地址
- 名字 可以使变量名,段名,子程序名
标号和名字的命名方式都和c,c++ 语言相同,注意不区分大小写 - 助记符:帮助记忆指令的符号,反应指令的功能。
处理器助记符:处理器指令,表示处理器的一种操作
伪指令助记符:byte,等,表明数据类型,在主存中分配若干的存储空间,用于保存变量值
例如:
msg 有段基地址和偏移地址,可以用offset 获得其偏移地址msg byte 'Hello',13,10,0 用c语言描述就是 char *msg = "Hello\n' 其中0 表示字符串结束
mov eax offset msg ; eax 获得 msg的偏移地址并将其放到eax寄存器
4 源程序框架
include io32.inc ; 相当于c语言包含头文件
.data ; 数据段,相当于c语言事先声明一些常量大的值
......
.code ; 代码段 运行的代码
start: ; 相当于c语言的int main() 程序从这里开始
.....
eixt 0 ; 相当于return 0;
... ; 这里定义子程序,相当于c语言的函数
end start ; 对应start 表示程序段的结束
库函数
库函数调用方式:
call 函数名
1. DISPMSG
二 数据寻址方式
子程序
printf("%s",a) a = eax 寄存器里的地址
DISPMSG 入口参数,EAX = 字符串地址 , 显示字符串
printf("%c",a) a = eax 的前八位,表示字符的ASCII
DISPC 入口参数, EAX 的前八位为字符的ASCII 为一个type类型,表示一个字符
printf("\n")
DISPCRLF 回车换行
DISPRD 输出八个32 位通用寄存器内容
DISPRF 显示6个状态标志的状态
printf("%lx",a) a = EAX 寄存器里的32位数据
DISPHD 以十六进制打印
DISPSID 无符号十进制整数输出
READMSG EAX = 缓存器地址,功能:输入一个字符串(回车结束)
scanf("%d",&a) eax = a
READC EAX的前八位 = 字符的ASCII,输入一个字符
READHD 输入一个8位十六进制数
READUID 输入一个32位无符号十进制整数
READSID 输入一个32位有符号十进制整数
```