1、CF指令对操作数的要求:单操作数指令中的操作数不允许使用立即数 双操作数指令中,立即数只能作为源操作数,不允许源操作数和目的操作数都是存储器。1, 加法运算指令(不允许段寄存器作为操作数和两个都是存储器)1) ADD普通加法指令(对全部6个状态标志位都会产生影响)ADD OPRD1,OPRD2 ;OPRD1+OPRD2送到OPRD1中去ADD SI,BX是错误的 ;不允许两个操作数都是存储器操作数 例:MOV AL,7EH ADD AL,5BH 程序执行后,AL=D9H,即11011001B, D9H7FH(8位带符号数的最大值) OF=1 D9HBX CF=1,AX SF,OF不同,AX例:
2、3-24在内存数据段从DATA开始的单元中存放了两个8位无符号数,试比较他们的大小,并将大的数送MAX单元、LEA BX,DATAMOVE AL,BXINC BXCMP AL,BXJNC DONEMOV AL,BXDONE:MOV MAX,AL HLT3, 乘法指令MUL无符号乘法指令(影响CF和OF)MUL OPRD隐含寻址方式,隐含目标操作数AX(DX),源操作数由指令给出。字节乘法:OPRD*AL 送到AX中字乘法:OPRD*AX 送到DX:AX中这里,源操作数OPRD可以是8位或16位的寄存器或存储器。乘法指令要求两操作数字长相等,且不能为立即数。MUL BX ;用AX*BX送到DX:
3、MUL BYTE PTRSI ;AL*SI送到AX中MUL DL ;用AL*DL送到AX中设AL=0FEH,CL=11H,两数均为无符号数,求AL与CL的乘积。MUL CL指令执行后:AX=10DEH,因AH中的结果不为零,故CF=OF=1。乘积的高半部分不为0,则CF=OF=1,代表AH或DX中包含乘积的有效数字 高半部分为0,则CF=OF=04, 除法指令DIV 无符号数除法指令(对6个标志位均无影响) DIV OPRD隐含寻址方式,隐含了被除数,除数OPRD不能为立即数除数OPRD 8位,则被除数AX 16位 字位拓展指令CBW AX/OPRD放入AL,AX%OPRD放入AH除数OPRD
4、 16位,则被除数 DX(高):AX(低) 32位 字位拓展指令CWD DX:AX/OPRD 放入AX,DX:AX%OPRD放入DX用除法指令计算7FA2H/03DDH MOV AX,7FA2H MOV BX,03DDH CWD ;AX扩展为DX=0000H,AX=7FA2H DIV BX ;商=AX=0021H,余数=DX=0025H3.3.3 逻辑运算与移位指令1,逻辑运算指令 除NOT指令外,其余4条指令对操作数的要求与MOV指令相同,且使OF=CF=0,其余值不定 1)AND逻辑“与”指令 AND OPRD1,OPRD2 ;按位相与,仅1与1=1 作用之一:使目标操作数的某些位保持不变
5、,把其他位清0AND AL,0FH ;将AL中的高4位清0,低4位保持不变作用之二;使操作数不变,但影响6个状态标志位,OF=CF=0AND AX,AX 2)OR逻辑“或”指令 OR OPRD1,OPRD2 ;使目标操作数的某些位保持不变,将另外一些位置1 OR AL,20H ;将AL中的D5位置1,其余不变作用之二: OR AX,AX3)NOT逻辑“非”指令(对6个标志位均无影响)NOT OPRD ;OPRD按位取反OPRD 不能是立即数NOT WORD PTRSI4)XOR逻辑“异或”指令XOR OPRD1,OPRD2 ;将两操作数按位进行“异或”异或操作:两操作数相同时为0,不同时为1
6、作用:使某寄存器清零 XOR AX,AX ;使AX清零5)TEST测试指令TEST OPRD1,OPRD2 ;仅影响标志位,工作与AND相同TEST AL,02H ;若AL中D1位为1,则ZF=0,否则ZF=12,移位指令(影响6个状态标志位)实现寄存器操作数或内存操作数进行指定次数的位移 移动1次,指令直接给出,2位及以上,移动位数要放在CL寄存器中。1) 非循环移位指令算数移位指令针对有符号数,逻辑移位指令针对无符号数 SAL和SHL 算数左移和逻辑左移执行完全相同的操作 SAL OPRD,1/CL SHL OPRD,1/CL 将OPRD中的内容左移一位或CL位,每移一位,左边的最高位移入
7、标志位CF,在最低位补零。 若移动一次,操作数的最高位和CF标志位状态不相同,则OF=1 状态相同,则OF=0 (判断移位前后的符号位是否一致。)MOV AL,41HSHL AL,1执行结果为AL=82H,CF=0,OF=1M若视AL为无符号数,则它没有溢出(82H7FH)(原先AL是41H,而后移位后吗,D7位从0变为了1,产生了溢出。把以DATA为首址的两个连续单元中的16位无符号数乘以10LEA SI,DATAMOV AX,SISHL AX,1 将二进制无符号数左移一位相当于将这个数乘以2MOV BX,AXMOV CL,2 左移两位,则乘以4SHL AX,CLADD AX,BXHLTSH
8、R逻辑右移指令 SHR OPRD,1/CL OPRD顺序向右移1位或CL位,右边最低位移入CF,左边最高位补零 移动一次,若移动后的最高位与起先的不同,则OF=1,如果相同,则OF=0。MOV AL,82HSHR AL,1执行结果:AL=41H,CF=0,OF=1 每逻辑右移一位,相当于无符号的目标操作数除以2,可以用SHR指令完成把一个数除以2I的运算 SAR算数右移指令 SAR OPRD,1/CL OPRD顺序向右移1位或CL位,右边最低位移入CF,左边最高位保持不变 不影响OF,AFSAR AL,1AL=C1H,CF=0。2) 循环移位指令如果最高位与CF不相同,则OF=1;相同,则OF
9、=0 ROL不带CF的循环左移指令 ROL OPRD,1/CL OPRD向左移动1位或CL指定位,最高位移入CF,同时再移入最低位构成循环ROL AL,1执行结果:AL=05H,CF=1,OF=1ROR不带CF的循环右移指令 ROR OPRD,1/CL OPRD向右移动1位CL指定位,最低位移入CF,同时再移入最低高位构成循环ROR AL,1AL=41H,OF=1,CF=0 RCL 带CF的循环左移指令 RCL OPRD,1/CL OPRD连同CF一起向左移动1位或CL指定位,最高位进入CF,CF原来的值进入最后一位。 RCR 带CF的循环右移指令 RCR OPRD,1/CL OPED连同CF
10、一起向右移动1位或CL 指定位,最低位进入CF,CF中原来的值进入最高位4.1汇编语言源程序机器语言:计算机硬件系统唯一能够直接理解和执行的语言汇编语言:使用指令助记符,符号地址,标号和伪指令等来书写程序4.2伪指令 4.2.1数据定义伪指令 1格式:变量名 伪操作 操作数 ,操作数 常用的数据定义伪指令有5种(1) DB:定义变量为字节类型。变量中的每个操作数都占一个字节(00FFH)。DB伪指令也常用来定义字符串。(2) DW:定义变量未字类型。DW伪指令后面每个操作数都占用2个字节。在内存中存放是,低字节低地址,高字节高地址。(3) DD:定义双字类型的变量。DD伪指令后面的每个操作数都
11、占4个字节。在内存中存放时,同样是低字节低地址,高字节高地址。(4) DQ:定义四字类型的变量。(5) DT:定义十字节类型的变量。DT伪操作后面的每个操作数都为10个字节的压缩BCD数。 2. 操作数 操作数(大于等于一个):常数,表达式或字符串 操作数的值不能超过由伪操作所定义的数据类型限定的范围 例如:DB 操作数范围:0255(无符号数) -128+127(有符号数) 字符和字符串都必须放在单引号中。 超过两个字符的字符串只能用DB指令。 DATA DB 11H,33H NUM DW 100*5+88 STR DB HELLO! DATA2 DW ? ;为变量DATA2分配2个字节的空
12、间,初始值为任意值。SUM DQ 0011223344556677H DATA2 DW 11H,22H,3344H由低到高存入 最下面的最高77H 00H66H 11H55H 00H44H 22H33H 44H22H 33H11H00HDATA1 DB 11H,22H,33H,44H DATA2 DB ABCD,66H11H 41H A22H 42H B33H 43H C44H 44H D 66HDATA3 DD 11H*2,22H,33445566H22H33H44H55H66H3.重复操作符 DUP DATA1 DB 20 DUP(?) ;为变量DATA1分配20个字节的空间,初始值为任意值 DATA3 DB 20 DUP(30H);为变量DATA3分配20个字节的空间,初值均为30H例4-34.2.2 符号定义伪指令
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1