汇编字符串中字符赋值的简单问题

2025-12-18 02:52:49
推荐回答(4个)
回答1:

此程序可以增加灵活性,可以输入要修改的位置及修改成什么字符,并将修改前后的内容输出对比。
data segment
msg1 db "source string is:$"
s db "0000h", 0Dh,0Ah,"$"
msg2 db 0Dh,0Ah, "Please input a location(0-3):$"
msg3 db 0Dh,0Ah, "Please input a char:$"
msg4 db 0Dh,0Ah, "destination string is:$"
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax

lea dx,msg1;显示原串
mov ah,9
int 21h
lea dx,s
mov ah,9
int 21h

lea dx,msg2;输入想修改原串哪个位置
mov ah,9
int 21h
next:
mov ah,1
int 21h
sub al,30h;位置在0-3之间
jz next
cmp al,3
ja next
mov ah,0
lea si,s
add si,ax;用SI表示要修改的实际地址

lea dx,msg3;输入想修改成的字符
mov ah,9
int 21h
mov ah,1;
int 21h

mov [si],al;将指定位置修改成指定字符

lea dx,msg4;显示目的串
mov ah,9
int 21h
lea dx,s
mov ah,9
int 21h

mov ah,1;按任意键终止
int 21h
mov ax,4c00h;结束程序
int 21h
code ends
end start

回答2:

这个问题就太简单了,主要指令就一条。
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
s db "0000h", 0Dh,0Ah,"$"
Start: push cs
pop ds ;使数据段与代码段同段
mov s[3],'A' ;修改第3位字符。(注意:内存中的字节编号是从0开始的)
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束

回答3:

;让你看到修改前后效果.
data segment
s db "0000h", 0Dh,0Ah,"$"
data ends
code segment
assume cs:code,ds:data
main:
mov ax,data
mov ds,ax
lea dx,s
mov ah,9
int 21h ;显示源串
lea si,s
mov byte ptr [si+3],'A';替换
lea dx,s
mov ah,9
int 21h ;显示目标串
mov ah,0
int 16h
mov ah,4ch
int 21h

code ends
end main

回答4:

mov ds,data
mov si,3
mov al,'A'
mov [si],al