问题 7.9: 将 datasg 段中前 4 个字母变成大写
汇编代码:
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
db 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 ax,stacksg ; 栈 用来临时保存数据
mov ss,ax
mov sp,16
mov bx,0 ; 表示行
mov cx,4 ; 外层循环循环次数
lop_1:
push cx
mov si,3
mov cx,4
lop_2:
mov al,[bx+si]
and al,11011111b
mov [bx+si],al
inc si
loop lop_2
add bx,16 ; bx + 16 表示 指示下一行
pop cx
loop lop_1
mov ax, 4c00h
int 21h
codesg ends
end start
程序运行前 数据段 数据:
程序运行后 数据段 数据
分析:
第7章 【更灵活的定位内存地址的方法】 主要学习了一下内容:
汇编语言是按行一条一条指令进行执行的,可以按高级语言进行缩进来写汇编程序例如可以按照 Pyhton 的空格缩进 ),最后再把缩进给去掉,这样可以更好的理解汇编的逻辑和层级关系。
按 python 格式的缩进后的汇编代码:
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
db 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display ' ;16字节
db '2. brows ' ;16字节
db '3. replace ' ;16字节
db '4. modify ' ;16字节
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 ; 外层循环循环次数
lop_1:
push cx
mov si,3
mov cx,4
lop_2:
mov al, [bx+si]
and al, 11011111b
mov [bx+si], al
inc si
loop lop_2
add bx,16 ; bx + 16 表示 指示下一行
pop cx
loop lop_1
mov ax, 4c00h
int 21h
codesg ends
end start
标签:16,中前,db,mov,datasg,ax,7.9,bx From: https://blog.51cto.com/csnd/5956105