汇编语言,在线等,一道题,急,,,,
把字符串STRING中的'&'字符用空格符代替。STRINGDB'ThedateisFEB&03’,程序已经给出,请详细解释各个步骤原因,初学,请原谅datasegmen...
把字符串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
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 展开
1个回答
展开全部
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,标准写法。
本程序缺点:如果字符串中有多个'&'字符,则只能替换一个。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询