|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 shuiyu 于 2017-10-18 22:02 编辑
越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢
一、关于指令adc的的编程任务
(1)编程计算1EF000H+201000H,结果放在ax(高16位)和bx(低16位)中。
关于这问题我咋子前一讲中也给出了答案,只是步骤稍微有点多
看了这次教程我发现居然可以这么简单 就下面那四行代码:
mov ax,001EH ;
mov bx,0F000H
add bx,1000H ;1EF000H的低16位与201000的低16位相加
abc ax,20 ;使用adc指令,1EF000H的高16位与201000的高16位相加,同时再加上CF,即使发生进位也不用担心计算错误
(2)1EF0001000H+2010001EF0H,结果放在ax(高16位),bx(次高16位),cx(低16位)中。
折一题其实和上面的一样,只是多了一个寄存器而已,多加两条代码就可以实现了
mov ax,001EH
mov bx,0F00H
mov cx,1000H
add cx,1EF0H ;低加低、高加高,先从低位开始计算,且在后面使用adc指令,防止发生进位导致计算错误
adc bx,1000H
adc ax,0020h
(3)
编写一个子程序,对两个128位数据进行相加。
名称:add128
功能:两个128位数据进行相加
参数:ds:si指向存储第一个数的内存空间,因数据为128位,所以需要8个字单元,由低地址单元到高地址单元依次存放 128位数据由低到高的各个字。运算结果存储在第一个数的存储空间中。 ds:di指向存储第二个数的内存空间。
代码请看图,具体解释我就不说了,小甲鱼的教程已经说得很清楚了
要记住重要的两点:
1.使用adc前记得要将CF归零(即:sub ax,ax)
2.使用adc命令过程中,add,sub等指令会对CF的值造成影响
二、sbb指令
(1)sbb是带错位减法指令,它利用了CF位上记录的借位值。
格式:sbb 操作对象1,操作对象2
功能:
操作对象1=操作对象1–操作对象2–CF
比如:sbb ax,bx
实现功能: (ax) = (ax) – (bx) – CF
(2)和adc可以说是一模一样,只是它是减法而已
三、cmp指令
(1)cmp 是比较指令,功能相当于减法指令,只是不保存结果。cmp 指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
(2)通俗的来讲cmp指令,就是模拟执行减法命令,减法命令后会导致标志寄存器发生什么变化;而这个标志寄存器的变化会保存下来,但是其它的都不会发生变化,所以说是模拟咯
(3)同 add、sub 指令一样,CPU 在执行cmp指令的时候,也包含两种含义:进行无符号数运算和进行有符号数运算。所以利用cmp指令可以对无符号数进行比较,也可以对有符号数进行比较。
谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢 |
|