【题目描述】
编程,将DATAS段中的每个单词的前4个字母改为大写并将改写后的结果分4行输出到屏幕上。
DATAS SEGMENT
db '1. display $'
db '2. brows $'
db '3. replace $'
db '4. modify $'
DATAS ENDS
STACKS SEGMENT
dw 0,0,0,0,0,0,0,0
STACKS ENDS
正确答案:
①
DATAS SEGMENT
st1 db '1. display $'
db '2. brows $'
db '3. replace $'
db '4. modify $'
datas ends
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
codesg segment
assume cs:codesg,ds:datas,ss:stacksg
start:
mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datas
mov ds,ax
mov bx,0
mov cx,4
s0:push cx
mov si,0
mov cx,4
s:mov al,[bx+si+3]
and al,11011111b
mov [bx+si+3],al
inc si
loop s
add bx,14
pop cx
loop s0
mov dx,offset st1
mov cx,4
s1:mov ah,09
int 21h
add dx,14
push dx
mov dl,10
mov ah,02
int 21h
pop dx
loop s1
mov ah,4ch
int 21h
codesg ends
end start
②
DATAS SEGMENT
st1 db '1. display $'
db '2. brows $'
db '3. replace $'
db '4. modify $'
DATAS ENDS
STACKS SEGMENT
dw 0,0,0,0,0,0,0,0
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,STACKS
mov ss,ax
mov sp,16
mov cx,4 ;有4行字符串要改写
mov bx,0 ;字符串的起始地址
s2: push cx ;保存外层循环的cx
mov cx,4 ;要修改4个字符
mov si,3 ;从字符串的第4个字符开始改写
s0: mov al,[bx+si] ;取出字符
and al,11011111b ;改成大写
mov [bx+si],al ;改写后的字符存回去
inc si
loop s0
pop cx ;恢复外层循环的cx
add bx,14 ;下一行字符串的首地址
loop s2
mov dx,offset st1
mov cx,4
s1:
mov ah,09
int 21h
add dx,14
push dx ;保存dx的值,因为下面要输出一个换行符,会改变dx的当前值
mov dl,10
mov ah,02
int 21h ;输出一个换行符
pop dx ;恢复dx的值
loop s1
MOV AH,4CH
INT 21H
CODES ENDS
END START