lab 6
(1)
完成7.9 中的问题
编程, 将 datasg 段中每个单词的首字母字母改成大写字母
assume cs:codesg,ss:stacksg,ds:datasg
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,datasg
mov ds,ax
mov cx,4
mov bx,2
s: and ds:[bx], 1101111111111111b
add bx,16
loop s
mov ax,4c00h
int 21h
codesg ends
end start
(2)
编程, 将 datasg 段中每个单词的前四个字母改成大写字母
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0 ;16个字节作为 cx 的暂存区
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov ax,stacksg
mov ss,ax
mov sp,16
mov bx,0
mov cx,4
r: push cx
mov cx,4
mov si,0
c: mov al,ds:[bx+si+3]
and al,11011111b
mov ds:3[bx+si],al
inc si
loop c
pop cx
add bx,16
loop r
mov ax,4c00h
int 21h
codesg ends
end start
分析&总结
双循环, 可以用栈结构来暂存 cx的值, 如果是多个循环, 可以用sp 去改变暂存区的位置,
对于单字节的处理,
可以先用al 等可拆为单字节的寄存器 处理
然后再回 内存