汇编语言,在线等,一道题,急,,,,

把字符串STRING中的'&'字符用空格符代替。STRING DB 'The date is FEB&03’ ,程序已经给出,请详细解释各个步骤原因,初学,请原谅
data segment
STRING DB 'The date is FEB&03'
count equ $-string
data ends
code segment
assume ds:data,es:data,cs:code
start:
mov ax,data
mov ds,ax
mov es,ax
lea di,string
mov cx,count
mov al,'&'
cld
repnz scasb
jnz tj
mov byte ptr [di-1],20h
tj:
mov ax,4c00h
int 21h
code ends
end start

data segment  ;数据段定义
  STRING DB 'The date is FEB&03' ;字符串定义
  count equ $-string ; '$'是当前地址,$-string即string字符串变量的长度,其值送入变量count中
data ends ;数据段定义结束 标准写法

code segment ;代码段
  assume ds:data,es:data,cs:code ;assume伪指令,把段和寄存器对应起来
start:  ;代码开始
  mov ax,data ;数据段首地址送入ax,ax是中转寄存器
  mov ds,ax   ;数据段首地址状入ds、
  mov es,ax   ;和es

  lea di,string ; 字符串变量string的偏移地址送入di
  mov cx,count  ; 字符串长度送入cx寄存器,cx寄存器是LOOP循环指令的计数寄存器
  mov al,'&'    ; al寄存器送入'&'字符
  cld           ; 字符串处理的方向,详细见cld指令说明
  repnz scasb   ; scasb指令常与循环指令REPZ/REPNZ合用。
                ; 例如,REPNZ scasb 语句表示当寄存器CX>0 且 标志寄存器ZF=0,
                ; 则再执行一次scasb指令。
                ; 比较寄存器AL的值不相等则重复查找的字
 jnz tj         ; 循环结束,没有发现相等的字符,则跳转到tj
  mov byte ptr [di-1],20h ;发现,则用空格(0x20)替换该字符
tj: 
  mov ax,4c00h ; 返回操作系统中断调用
  int 21h      ;

code ends  ;代码段结束
end start  ; end start,标准写法。

 本程序缺点:如果字符串中有多个'&'字符,则只能替换一个。

温馨提示:答案为网友推荐,仅供参考
相似回答