《汇编语言(第三版)》(王爽)书中问题7.9,将前七章的知识运用完成一道简单的汇编题目
通过编程将datasg段中每个单词前4个字母改写为大写字母
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:
codesg ends
end start
分析:
datasg中数据结构如图:
datasg中定义了4个字符串,每个字符串长度均为16字节,要求修改每个单词前4个字母,则要修改每个字符串的[3]~[6]
用一个二重循环解决问题,第一重循环用来循环字符串,第二重用来修改第一行字符串的[3]~[6], 共4*4次循环。
运用一个栈保存第一次循环数,用将数据与11011111b相与将其变为大写。
代码:
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,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s: push cx
mov di,3
mov cx,4
s0: mov al,[bx+di]
and al,11011111b
mov [bx+di],al
inc di
loop s0
pop cx
add bx,16
loop s
mov ax,4c00h
int 21
codesg ends
end start
验证:
变化前:
变化后: