MUL BL; AL*BL?AX MUL BX; AX*BX?【DX AX】 7、除法指令
DIV BH; AX/BH?AH(余数)AL(商) DIV BX; 【DX AX】/BX? DX(余数)AX(商) 8、逻辑与指令 AND AX,BX AND CH,0FH 9、逻辑或指令 OR AX,BX OR CL,80H 10逻辑异或指令 XOR BX,F0H 11、无条件跳转指令JMP
JMP S1; 让程序跳转到标号S1处继续执行 12、条件跳转指令JZ、JNZ CMP AX,BX;
JZ S1; 当ZF=1【即AX=BX】时跳转到标号S1处继续执行
JNZ S1;当ZF=0【即AX≠BX】时跳转到标号S1处继续执行 13、指令练习
五、常用伪指令
1、等值伪指令EQU
X1 EQU 58; 即给X1符号赋予了值58
使用伪指令PURGE X1可以解除对X1的定义,解除后X1符号才可以重新定义新的值。 2、等号伪指令=
X1 = 58; 即给X1符号赋予了值58,与EQU作用相同,但是区别是使用“=”可以给X1重新赋予新值。 3、数据定义伪指令 (1)定义一个字节变量DB X DB 56H; Y DB 70H,?,80H; Z DB 100 DUP(00H) (2)定义一个字变量DW
X DW 1234H;
Y DW 8B9CH,?,8000H; x 1 (3)定义一个双字变量DD 10 X DD 12345678H; y 00 Y DD 01H,?02H;
12 FF 4、数据段中数据的定义及在内存中的存放 40 data segment x db 1 , ? , 10 z 78 y dw 1200H , 40FFH , ? 56 z dd 12345678H , 123H 34 12 data ends 23 5、属性操作符
01 00 (1)TYPE <标号或变量>
00 计算变量的类型值或标号的类型值
用DB,DW,DD,DF,DQ,DT定义的变量对应的类型值分别是1,2,4,5,8,10; NEAR和FAR对应的类型值分别为-1、-2 (2)LENGTH <变量>
对于用DUP定义的变量,计算DUP前面的重复次数,其它变量的LENGTH值为1。 (3)SIZE <变量>
计算分配给该变量的字节数,其值为TYPE和LENGTH的乘积。 (4)OFFSET <变量或标号>
计算变量或标号的段内偏移地址。
如:MOV SI,OFFSET TAB1 功能是将TAB1的偏移地址送入SI寄存器中,等价于 LEA (5)SEG <变量或标号> 计算变量或标号的段地址。
如:MOV AX,SEG TAB1功能是将TAB1的段地址送入AX寄存中。 (6)<数据类型> PTR <地址表达式>
MOV BYTE PTR[BX],5 ;字节传送 MOV WORD PTR[BX],5 ;字传送
六、汇编程序的一般框架
1、只有一个代码段 CODE SEGMENT
SI,TAB1
ASSUME CS:CODE S : ….
MOV AH , 4CH INT 21H CODE ENDS END S
2、一个代码段和一个数据段
DATA SEGMENT …. DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA S:MOV AX , DATA MOV DS , AX ….
MOV AH , 4CH INT 21H CODE ENDS END S
3、一个代码段和一个数据段、一个附加段 EXTD SEGMENT …. EXTD ENDS
DATA SEGMENT …. DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,ES:EXTD S: MOV AX , DATA MOV DS , AX MOV AX , EXTD MOV ES , AX ….
MOV AH , 4CH INT 21H CODE ENDS END S
4、一个代码段,数据段和附加段共用一个物理段 DATA SEGMENT …. DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,ES:DATA
S: MOV AX , DATA MOV DS , AX MOV ES , AX ….
MOV AH , 4CH INT 21H CODE ENDS END S 5、总结
(1)一个汇编源程序通常由代码段、数据段、附加段、堆栈段构成;
(2)代码段用于存放指令;数据段和附加段用于定义和存放数据;堆栈段用于建立程序所需要的堆栈; (3)一个程序必须有代码段,而数据段、附加段、堆栈段可有可无 (4)可以将几个逻辑段映射到一个物理段上
七、汇编程序的上机过程
1、编写源程序
利用记事本或其它文字编辑软件编写汇编源程序,源程序后缀名保存为.ASM 2、编译源程序
使用文件MASM对源文件进行编译,编译命令如下: MASM *.ASM
若无编译错误,则生成目标文件*.OBJ 3、连接目标程序
使用文件LINK对目标文件进行连接,连接命令如下: LINK *.OBJ
若无连接错误,则生成运行文件*.EXE
八、调试软件DEBUG的使用
当程序的运行结果在内存而没有显示到屏幕上,或者运行结果不正确时,我们就需要使用DEBUG软件来进行调试运行,以便发现错误所在及其原因。 1、汇编命令A
如上图,在DEBUG命令提示符-下输入A命令回车,即出现汇编指令起始地址189B:0100, 在其后输入指令:MOV AX,1234并回车,则189B:0103即为下一条待输入指令的地址。若 不输入指令而回车,代表指令输入结束。 2、单步执行命令T
如上图,在DEBUG命令提示符-下输入T命令回车,即显示第一条指令执行后各寄存器的数据内容, 若继续输入T回车,则会继续显示下一条指令执行后各寄存器的数据内容。 3、文件装入命令N、L
(1)在运行DEBUG时装入执行文件,方法如下: DEBUG A.EXE
(2)在DEBUG运行后,使用N、L命令装入执行文件,如下:
其中N命令指定待装载文件的名称;L命令进行装载。 4、反汇编命令U
当执行文件已装入内存后,使用U命令可以将机器码重新反汇编为源指令代码及指令所在地址。 5、运行命令G
也可以使用【G=1947:0000】在G后加上要运行程序的起始地址 6、查看数据命令D