题目:将datasg段中的每个单词改写成大写字母
分析:这里要知道的两个问题。1:知道如何把字母转换成大写。把其ascii码的第五位设置成0就是大写,设置成1就是小写。2:在datasg段定义的4个单词,每个的存储长度都是10h。然后可以用二维数组的概念来理解。其三:这里要应用到[bx+si+idata]的形式。
源代码:
datasg segment
db 'file '
db 'edit '
db 'reen '
db 'view '
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov bx,0
mov si,0
mov cx,4
s:mov al,[bx][si]
and al,11011111B
mov [bx][si],al
mov al,[bx][si+1]
and al,11011111B
mov [bx][si+1],al
mov al,[bx][si+2]
and al,11011111B
mov [bx][si+2],al
mov al,[bx][si+3]
and al,11011111B
mov [bx][si+3],al
add bx,10h
loop s
mov ax,4c00h
int 21h
codesg ends
end start
程序开始执行后的datasg数据段的数据值:
结果:
第二种:可以用两重循环来进行操作,但是该如何保存循环的计数值。开始的时候有想到要把外层的cx值给保存起来,但是不知道如何保存,后来看了7.8之后,才知道先把cx的值送到一个寄存器中保存,待内层循环执行完之后再从寄存器中恢复给cx。
源代码2:
datasg segment
db 'file '
db 'edit '
db 'reen '
db 'view '
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s0:mov dx,cx
mov si,0
mov cx,4
s:mov al,[bx][si]
and al,11011111B
mov [bx][si],al
inc si
loop s
add bx,10h
mov cx,dx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
调试过程2:
AX=0710 BX=0000 CX=0068 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0710 CS=0714 IP=0003 NV UP EI PL NZ NA PO NC
0714:0003 8ED8 MOV DS, AX
-t
AX=0710 BX=0000 CX=0068 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0710 ES=0700 SS=0710 CS=0714 IP=0005 NV UP EI PL NZ NA PO NC
0714:0005 BB0000 MOV BX, 00000h
-t
AX=0710 BX=0000 CX=0068 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0710 ES=0700 SS=0710 CS=0714 IP=0008 NV UP EI PL NZ NA PO NC
0714:0008 B90400 MOV CX, 00004h
-t
AX=0710 BX=0000 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0710 ES=0700 SS=0710 CS=0714 IP=000B NV UP EI PL NZ NA PO NC
0714:000B 8BD1 MOV DX, CX
-t
AX=0710 BX=0000 CX=0004 DX=0004 SP=0000 BP=0000 SI=0000 DI=0000
DS=0710 ES=0700 SS=0710 CS=0714 IP=000D NV UP EI PL NZ NA PO NC
0714:000D BE0000 MOV SI, 00000h
-d ds:0
0710:0000 66 69 6C 65 20 20 20 20-20 20 20 20 20 20 20 20 file
0710:0010 65 64 69 74 20 20 20 20-20 20 20 20 20 20 20 20 edit
0710:0020 72 65 65 6E 20 20 20 20-20 20 20 20 20 20 20 20 reen
0710:0030 76 69 65 77 20 20 20 20-20 20 20 20 20 20 20 20 view
0710:0040 B8 10 07 8E D8 BB 00 00-B9 04 00 8B D1 BE 00 00
结果如下: