汇编语言学习

(持续更新)

汇编指令

1.loop指令

loop在汇编中用作循环,会执行标号到loop之间的部分,循环结束条件是cx寄存器的值为0。下面是一个例子,令ax寄存器中的值累加6次。

assume cs:code

code segment
    mov ax,0
    mov cx,6
s:  inc ax
    loop s
    mov ax,4c00h
    int 21h
code ends

end

约定一下,(xxx)代表xxx寄存器中的值。

循环部分的执行流程为,遇到loop指令的时候,(cx)先减1,如果(cx)==0,则循环结束,执行下一条语句,否则调到标号对应的位置。这里有一个容易迷惑人的地方,就是如果先判断(cx)-1的值,那循环只执行了5次,那如何做到的使(ax)为6呢。原因很简单,在第一次遇到标号s对应的汇编指令时,该指令会执行一次,无视标号。(标号并不是指令,只是起到指示地址的作用,编译后会被转化为实际的地址。)只有在遇到loop指令时,才会进行判断,然后选择是否跳转到标号的位置执行相应的命令。

运行一下程序,执行debug程序,观察程序运行的每一步。

inc第一次执行,cx寄存器并不受影响
1482461-20190909094124644-251546711.png

执行到loop的时候,cx寄存器发生了变化。而且可以看到,在被编译后,s已经没有了,变成了其实际的IP寄存器的位置0006。
1482461-20190909100017942-174490872.png

后面就不全展示了。
1482461-20190909100314257-1495383720.png

2.div指令

该指令用于除法运算,除数存放在一个8位寄存器中,被除数在存放在ax中。得到的商在al寄存器中,余数在ah寄存器中。

下面是一个例子。

    mov ax,26
    mov bl,10
    div bl

观察一下寄存器中的值。
1482461-20190909150437394-1316044148.png

转载于:https://www.cnblogs.com/kevinbruce656/p/11490087.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值