速通汇编(三)寄存器及汇编mul、div指令

一,寄存器及标志

补充:常用的AX,BX,CX,DX这四个寄存器,是被分成两部分用的

例如,AH和AL共同组成AX,AH称作AX的高位,AL称作AX的低位

  • 单独看:AH和AL都可以当成一个独立的寄存器来使用,能存放00到FF之间的数
  • 合作看:AX又算作一个独立的寄存器,能存放0000到FFFF之间的数

BX、CX、DX同理

  • AH&AL=AX(accumulator):累加寄存器
  • BH&BL=BX(base):基址寄存器
  • CH&CL=CX(count):计数寄存器
  • DH&DL=DX(data):数据寄存器
  • SP(Stack Pointer):堆栈指针寄存器
  • BP(Base Pointer):基址指针寄存器
  • SI(Source Index):源变址寄存器
  • DI(Destination Index):目的变址寄存器
  • IP(Instruction Pointer):指令指针寄存器
  • CS(Code Segment):代码段寄存器
  • DS(Data Segment):数据段寄存器
  • SS (Stack Segment):堆栈段寄存器
  • ES (Extra Segment):附加段寄存器

OF overflow flag 溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1

SF sign flag 符号标志 记录运算结果的符号,结果负时为1


ZF zero flag 零标志 运算结果等于0时为1,否则为0(例如比较两字符串是否相等,如果相等,那么cmp的结果为0,此时ZF将为1;ZF的值与后续的跳转指令息息相关,是十分重要的一个标志!)

CF carry flag 进位标志 最高有效位产生进位时为1,否则为0
AF auxiliary carry flag 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0

PF parity flag 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0

DF direction flag 方向标志 用于串处理,DF=1时,每次操作后使SI和DI减小,DF=0时则增大

IF interrupt flag 中断标志 IF=1时,允许CPU响应可屏敝中断,否则关闭中断


TF trap flag 陷阱标志 用于调试单步操作


二,mul指令

mul是multiply(乘法)的缩写,即汇编中用于操作乘的指令,但要注意,汇编中的乘法是有一点复杂的,不是简单的把两个数相乘后存起来,mul指令之后只跟一个操作数,但我们知道乘法肯定得要两个操作数,而另一个操作数默认取AL(AX的低位)或者AX

×错误的指令:mul reg1,reg2

✔正确的指令:mul reg

(注:reg指的是寄存器)

两个相乘的数,要求要么都是8位,要么都是16位——

(一)8位乘法

如果是8位,一个乘数默认取AL(即AX的低位)中的值,另一个乘数放在8位寄存器或者内存字节单元中,最终结果存入AX中,下图进行演示

(二)16位乘法

如果是16位,一个乘数默认取AX中的值,另一个乘数放在16位寄存器或者内存字节单元中,最终结果高位存入DX中(乘法结果不足16位的话相当于高位为0),低位存入AX中,下图进行演示

(三)什么情况下用8|16位乘法?

答:由两个乘数来决定,如果两数都小于255(十六进制为FF),使用8位乘法,反之16位


三,div指令

div是divide(除法)的缩写,即汇编中用于操作除的指令,汇编中除法的机制和乘法的机制很类似,也不是简单的把两个数相除后存起来,div指令之后只跟一个操作数作为除数,但我们知道除法肯定得要两个操作数,而另一个操作数取决于AX或者(DX和AX),且除数必须放于寄存器中

×错误的指令:div reg1,reg2        (div指令只跟一个操作数)

x错误的指令:div 2                      (div指令之后的操作数必须是寄存器)

✔正确的指令:div reg                  (reg中的值将作为本次除法的除数)

(注:reg指的是寄存器,div指令只跟一个操作数)

两个相除的数,要求除数为8位时,被除数必须为16位;除数为16位时,被除数必须为32位——

(一)16位 除以 8位的除法

当div指令之后的参数为8位除数时,被除数取决于AX中的值

相除得到的商存入AL(AX的低位)中,得到的余数存入AH(AX)的高位中(能整除、没有余数时相当于存放0),下图进行演示

(二)32位 除以 16位的除法

当div指令之后的参数为16位除数时,被除数默认取DX和AX中的值,将DX作为被除数的高16位,AX作为被除数的低16位

相除得到的商存入AX中,得到的余数存入DX(能整除、没有余数时相当于存放0),下图进行演示

(三)什么情况下用16|32位除法?

答:被除数不大于65535(十六进制为FFFF),即ax能完整存放被除数时,使用16位除法,反之32位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值