0%

第四章_算术运算

十进制加减运算

BCD吗矫正

非压缩型加法AAA

在AAA指令执行前,必须是使用ADD或ADC指令完成了加法,且结果是在AL中。AAA指令对AL中内容进行校正。

校正过程为:

当AL中的低4位>9或者AF=1, 则AL<=(AL)+6, AH<=(AH)+1,AL中高4位清0,AF和CF置1。

压缩加法DAA

在执行DAA指令前,必须是用ADD或ADC完成了加法操作,且加的结果放在AL中。

其校正过程为:

若AL中低4位>9或AF=1,则 AL<=(AL)+6, AF<=1

若AL中高4位>9或CF=1,则AL<=(AL)+60H, CF<=1

非压缩减法AAS

执行AAS指令前,必须是用SUB或SBB完成了减法操作,且结果放在AL中。

若AL中低4位>9或AF=1,则AL<= (AL)-6 , AH<= (AH)-1,同时将AL中高4位清零,CF和AF置1。

压缩减法DAS

执行DAS指令前,必须是用SUB或SBB完成了减法操作,且结果放在AL中。其校正过程为:

若AL中低4位>9或AF=1,则AL <=(AL)-6,AF置1;

若AL中高4位>9或CF=1,则AL<=(AL)-60H,CF置1。

举例:非压缩BCD码减法

设计思想:

两个十进制一位数相减(SBB)并矫正(AAS),然后利用LAHF暂存向高位借位(将CF保存到AH里),之后用SAHF恢复

多精度数运算

多精度变补

循环将每一位的取反,最后加1

32位乘法

比如如果一个乘数是第0位,另一个乘数是第1位,那么它们想乘的结果就应该放在第0(0 + 1 = 1)位