菜鸟自学汇编语言,恳请大佬帮帮忙

2025-05-14 06:59:11
推荐回答(2个)
回答1:

你看代码得在脑子里想像数据处理的过程。
首先读入输入成绩的字符串到变量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者的逻辑思维方式是有不同的。

回答2:

we are responsible 是主系表结构,中的 for our life 不属于状语范畴,而是表语补足语,或称形容词补足语。