十进制加减运算
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)位