shuiyu 发表于 2017-10-13 23:01:24

《零基础入门学习汇编语言》第五十六讲

本帖最后由 shuiyu 于 2017-10-18 22:02 编辑

越努力,越幸运。欢迎大家来看我的笔记{:10_297:},不对的请各位大佬指正,谢谢{:10_254:}

一、关于指令adc的的编程任务
(1)编程计算1EF000H+201000H,结果放在ax(高16位)和bx(低16位)中。
关于这问题我咋子前一讲中也给出了答案,只是步骤稍微有点多{:10_312:}
看了这次教程我发现居然可以这么简单{:10_266:} 就下面那四行代码:
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指向存储第二个数的内存空间。
代码请看图,具体解释我就不说了,小甲鱼的教程已经说得很清楚了{:10_312:}

要记住重要的两点:
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指令,就是模拟执行减法命令,减法命令后会导致标志寄存器发生什么变化;而这个标志寄存器的变化会保存下来,但是其它的都不会发生变化,所以说是模拟咯{:10_279:}
(3)同 add、sub 指令一样,CPU 在执行cmp指令的时候,也包含两种含义:进行无符号数运算和进行有符号数运算。所以利用cmp指令可以对无符号数进行比较,也可以对有符号数进行比较。


谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记{:10_297:},不对的请各位大佬指教,谢谢{:10_254:}

兰陵月 发表于 2017-10-16 16:44:58

越努力,越幸运。

说的很不错,

机会都是给有准备的人的。

机会都是给了那些准备好了的人的。

shuiyu 发表于 2017-10-16 19:08:53

兰陵月 发表于 2017-10-16 16:44
越努力,越幸运。

说的很不错,


嘿嘿,这是自己亲身体验才领悟到的{:10_250:}
页: [1]
查看完整版本: 《零基础入门学习汇编语言》第五十六讲