这一节我个人觉得比较难学(可能我基础差了些),一直接触的指令都是处理二进制数据的,突然接触了个按十进制数串的形式进行运算的,确实很盲目,本例就是这本书的ASCII_add.asm的例子,作者讲的我感觉我不够详细,理解着困难,所以以初学者的理解发这个文章,有什么理解不正确的地方,欢迎看到的指正。
下面直接分析程序:
TITLE ASCII Addition (ASCII_add.asm)
; 这是一个直接以“ASCII码”的存储方式进行相加运算的例子。也就是说我们用于计算的数(输入的数)是ASCII码形式的,
; cup无需将其转换成未压缩形式,直接以ASCII码格式进行数据的处理。
INCLUDE Irvine32.inc
DECIMAL_OFFSET = 5
.data
decimal_one BYTE "100123456789765" ; 这是本例子用于计算的数,每个数字占用1字节(8个bit)
decimal_two BYTE "900402076502015" ; 这是本例子用于计算的数,每个数字占用1字节(8个bit)
sum BYTE (SIZEOF decimal_one + 1) DUP (0),0
; SIZEOF操作符求得decimal_one的字节长度,这是最后调用库函数以字符串的形式输出,
; 末尾的0表示字符串结束标志,
; + 1是因为我们用于计算的数相加后可能会产生“十进制进位”。
.code
main PROC
mov esi,SIZEOF decimal_one - 1 ; 设置esi指向decimal_one字符数组的最后一个元素
mov