问题 7.9: 将 datasg 段中前 4 个字母变成大写
汇编代码:
assume cs:codesg,ss:stacksg,ds:datasgstacksg segmentdb 0,0,0,0,0,0,0,0
stacksg endsdatasg segmentdb '1. display 'db '2. brows 'db '3. replace 'db '4. modify '
datasg ends codesg segmentstart:mov ax, datasgmov ds, axmov ax,stacksg ; 栈 用来临时保存数据mov ss,axmov sp,16mov bx,0 ; 表示行mov cx,4 ; 外层循环循环次数lop_1:push cxmov si,3 mov cx,4lop_2:mov al,[bx+si]and al,11011111bmov [bx+si],alinc siloop lop_2add bx,16 ; bx + 16 表示 指示下一行pop cxloop lop_1 mov ax, 4c00hint 21h
codesg endsend start
程序运行前 数据段 数据:
程序运行后 数据段 数据
分析:
第7章 【更灵活的定位内存地址的方法】 主要学习了一下内容:
汇编语言是按行一条一条指令进行执行的,可以按高级语言进行缩进来写汇编程序 ( 例如可以按照 Pyhton 的空格缩进 ),最后再把缩进给去掉,这样可以更好的理解汇编的逻辑和层级关系。
按 python 格式的缩进后的汇编代码:
assume cs:codesg,ss:stacksg,ds:datasgstacksg segmentdb 0,0,0,0,0,0,0,0
stacksg endsdatasg segmentdb '1. display ' ;16字节db '2. brows ' ;16字节db '3. replace ' ;16字节db '4. modify ' ;16字节
datasg ends codesg segmentstart:mov ax, datasgmov ds, axmov ax,stacksg ; 栈 用来临时保存数据mov ss,axmov sp,16mov bx,0 ; 表示行mov cx,4 ; 外层循环循环次数lop_1:push cxmov si,3 mov cx,4lop_2:mov al, [bx+si]and al, 11011111bmov [bx+si], alinc siloop lop_2add bx,16 ; bx + 16 表示 指示下一行pop cxloop lop_1 mov ax, 4c00hint 21h
codesg endsend start