你看代码得在脑子里想像数据处理的过程。
首先读入输入成绩的字符串到变量string+2开始的地址中。
比如,输入12,34
String变量的内容就变成:
40, -- 初值,最大输入长度
05, -- 实际输入字符长度
31, -- 1
32, -- 2
44, -- ','
33, -- 3
34, -- 4
35, -- 13
然后再看你不解的代码:
lea di, cj
lea si, string+2, 此时(si)的内容即上面输入的31(第7行)
mov bh, 0
mov al, 0
Again:
mov bl, [si] ; 第1次执行,bl=31
cmp bl, ',' ; 判断是不是','分隔符
jz next
cmp bl, 0dh ; 判断是不是回车
jz next
sub bl, 30h ; 31->1, 把输入的'1',由ascII码值转换为实际的数值1
mov cl, 10
mul cl ; 第一次执行时,al=0,所以,(al) x(cl), ax=00
add al, bl ; (al) = (al)*10 + (bl)
inc si ; si->下一个字符,第一次执行后,指向2
jmp again ; 下一次循环
如此看,就清楚了吧。
就是循环计算:
0 x 10 + 1 = 1
1 x 10 + 2 = 12
0 x 10 + 3 = 3
3 x 10 + 4 = 34
汇编语言与高级语言不同,高级语言,一个计算用一个表达式就可以实现。
而汇编语言,要把表达式中的每一步都折分成单独的计算步骤。
2者的逻辑思维方式是有不同的。
we are responsible 是主系表结构,中的 for our life 不属于状语范畴,而是表语补足语,或称形容词补足语。