- 18
- 0
- 约6.23千字
- 约 42页
- 2016-09-15 发布于湖北
- 举报
x算数运算指令.ppt
错误分析 MOV AL,0B4H ;设置被乘数 MUL 11H ;指定立即数作乘数 MUL [BX+SI] ;当乘数为存储器操作数…… MUL BYTR PTR[BX+SI] MUL WORD PTR[BX+SI] 四、 除法指令 DIV /IDIV : 无符号/有符号数除法 格式: DIV/IDIV SRC 功能:将两个无符号/有符号数相除。除数显式给出,隐含使用另一个操作数AX、DX作为被除数。 DIV/IDIV r8/m8 ;AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余数 DIV/IDIV r16/m16 ;AX←DX.AX÷r16/m16的商, DX←DX.AX÷r16/m16的余数 被除数长度是除数的2倍 除法指令应用举例: 无符号 mov ax,0400h ;ax 400h 1024 mov bl,0b4h ;bl b4h 180 div bl ;商al=05h=5 ;余数ah=7ch=124 有符号 mov ax,0400h ;ax 400h 1024 mov bl,0b4h ;bl b4h -76 idiv bl ;商al=f3h=-13 ;余数ah=24h=36 除法指令注意事项: 源操作数不能使用立即数方式和段寄存器。 除法指令对标志位的影响:除法指令对标志没有定义。 除法错1: 当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。 例如: MOV AX,0FFF1H MOV DL,01H DIV DL ;商为FFF1H,AL中存放不下。 如果存放商的寄存器AL/AX不能表达,这种情况叫做溢出: 对DIV指令,除数为0,或者在字节除时商超过8位,或者在字除时商超过16位 对IDIV指令,除数为0,或者在字节除时商不在-128~127范围内,或者在字除时商不在-32768~32767范围内 示例 当产生除法溢出,CPU自动产生“0号”中断,运行相应中断服务程序。程序设计时,应避免产生除法溢出 next 除法错2: 除法指令的溢出问题:DIV下列情况可能产生溢出 除数为零 字节除时,被除数的高8位≥除数 商>8位) 字除时,被除数的高16位≥除数(商>16位) 高8位 低8位 8位除数 与高8位被除 数对应的商 S1 S2 S3 S1 S2 S3 1 S1>S2 S3>1 除法指令举例 div bl div byte ptr[bx] idiv cx idiv word ptr[bp+si] div 2050h × div [bx] × AL÷BL,AH为0 xor ah,ah / and ah,0 / mov ah,0 AX÷BX,使DX为0。 无符号数的扩展 采用直接使高8位或高16位清0的方法进行扩展 无符号数除法 符号扩展是指用一个操作数的符号位扩展形成另一个操作数。符号扩展不改变数据大小 符号扩展的概念 有符号数除法 例:将存放在AL中的带符号数-87,除以CL中的带符号数21 符号扩展指令: ·CBW 字节扩展成字指令 格式:CBW 功能:将(AL)的符号位扩充到AH中,形成AX中的字 即若(AL)的符号位为0,则(AH) 00H; 若(AL)的符号位为1,则(AH) 0FFH。 ·CWD 字转换成双字指令 格式:CWD 功能:CWD指令将(AX)的符号位扩展到DX,形成DX:AX中的双字 即若(AX)的符号位为0,则(DX) 0000H 若(AX)的符号位为1,则(DX) 0FFFFH。 举例: 例:将存放在AL中的带符号数-87,除以CL中的带符号数21 CBW ;将AL中带符号数扩展成AX ;AX 1111 1111 1010 1001B -87D IDIV CL ;AX内容除以CL内容 ;商在AL中AL -4D 1111 1100B, ;余数在AH中AH -3D 1111 1101B 指令不影响标志位 练习 1、在debug中写出以下程序片段 (1234+8765)+1-1+|-3| 具体要求: 1234在ds:[1000H]单元 mov 8765在ds:[2000h]单元 mov , -3的补码存放在dx寄存器中, 最后的计算结果存放在BX中 4.2 算术指令 ? 加法指令 ADD、ADC、INC ? 减法指令 SUB、SBB、DEC、NEG、CMP ? 乘法指令 MUL、IMUL 除法指令 DIV、IDIV 符号扩展指令 CBW、CWD 教学指示 请注意算术运算类指令对标志的影响 掌握:ADD/ADC/INC、SUB/SBB/DEC/ NEG/CMP 熟悉:MUL/IMUL、DIV/I
原创力文档

文档评论(0)