汇编语言程序设计

一 操作码和操作数

1 操作码

指令执行的操作(加减,传送)

2 操作数

指令操作的数据
mov 操作码用于数据传送,功能,将数据从一个位置传送到另一个位置

mov dest,src ; 相当于c语言的赋值语句   dest = src 

src 表示要传送的数据或者数据所在的位置
dest 表示数据将要传送到的位置
将寄存器ebx传送到eax 的指令

mov eax,ebx    

3 语句格式

执行性语句: 表达处理器指令的语句,对应一条指令代码

标号:处理器指令助记符    操作数,操作数    

说明性语句:表达汇编程序命令的语句,主要说明源程序如何汇编,变量如何定义,过程如何设置

名字     伪指令助记符    参数,参数,....... 
  1. 冒号前的标号表示处理器指令在主存里面的位置,主要用来指示分治,循环等程序的目的地址
  2. 名字 可以使变量名,段名,子程序名
    标号和名字的命名方式都和c,c++ 语言相同,注意不区分大小写
  3. 助记符:帮助记忆指令的符号,反应指令的功能。
    处理器助记符:处理器指令,表示处理器的一种操作
    伪指令助记符:byte,等,表明数据类型,在主存中分配若干的存储空间,用于保存变量值
    例如:
    msg byte 'Hello',13,10,0
    用c语言描述就是 char *msg = "Hello\n'  其中0 表示字符串结束
    
    msg 有段基地址和偏移地址,可以用offset 获得其偏移地址
    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位有符号十进制整数
    ```