1. 题目: 有字符串如下, 将前4个字母改为大写字母
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
每一段字符串的长度都是16, 即后面有补空格, 存储结构如下:
2. 实现如下:
assume cs:codesg, ds:datasg, ss: stacksg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start:
mov ax, stacksg
mov ss, ax
mov ax, datasg
mov ds, ax
mov bx, 0
mov cx, 4
s0: push cx
mov si, 0
mov cx, 4
s1: mov al, [bx+3+si]
and al, 11011111b
mov [bx+3+si], al
inc si
loop s1
add bx, 16
pop cx
loop s0
mov ax, 4c00h
int 21h
codesg ends
end start
3. 运行前后, 查看内存数据对比:
注: 英文字母小写变大写, 只要其二进制的第5位改为0; 大写变小写, 第5位为1. 因为第5位为2的5次方==32, 如:
- A 的ASCII为65, 二进制为
0100 0001
- a 的ASCII为97, 二进制为
0110 0001