本文主要是介绍汇编语言 循环嵌套 将datasg段中每个单词改为大写字母 改进版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目要求
将datasg段中每个单词改为大写字母
思路
注意用al存放ascii即可
大写对应的ascii第五位是0,除了第五位以外不变 and al,11011111b
注意循环嵌套的时候 只有一个cx不够用怎么办 可以放在dx中临时存储 等内循环执行完毕后 再从dx中将cx取出 即可正常嵌套循环
改进:将cx放栈中 这样使用push pop指令更方便 并且解决寄存器数量有限的问题
运行过程
执行前:所有行都是小写
执行完一遍外循环:第一行变成大写
执行完所有外循环:所有行都变成大写
程序结束
代码(原始)
;将datasg段中每个单词改为大写字母
;注意用al存放ascii即可
;;大写对应的ascii第五位是0,除了第五位以外不变 and al,11011111b
assume cs:code,ds:datasgdatasg segmentdb 'ibm 'db 'dec 'db 'dos 'db 'vax '
datasg endscode segment
start:;把datasg地址放到ds中mov ax,datasgmov ds,axmov si,0mov cx,6 ;6行 循环6次
s1: ;外循环6mov dx,cx ;用dx暂存cxmov bx,0 ;从第0个字母开始mov cx,3 ;改变3个字母 3次循环
s2: ;内循环mov al,ds:[si+bx] ;取出and al,11011111b ;改成大写mov ds:[si+bx],al ;放回inc bxloop s2 ;内循环底部mov cx,dx ;把外循环的cx还给它mov ax,si ;借助axadd ax,10h ;借助ax指向下一行mov si,ax ;ds指向下一行loop s1 ;外循环底部mov ax,4c00hint 21h
code ends
end start
改进后
题目有一点点小的变化:
题目要求
编程,将datasg段中每个单词的前4个字母改为大写字母
*本次改进,增加了对栈的使用
运行过程
执行一次外循环后,第一行单词前三个字母被改为大写
执行所有外循环后,所有单词前三个字母被改为大写,成功~
代码
还是图片版代码看着舒服 有高亮
;编程,将datasg段中每个单词的前4个字母改为大写字母
assume cs:codesg,ss:stacksg,ds:datasgstacksg segment stackdw 0,0,0,0,0,0,0,0
stacksg endsdatasg segmentdb '1. display 'db '2. brows 'db '3. replace 'db '4. modify '
datasg endscodesg segment
start: ;把datasg地址放到ds中mov ax,datasgmov ds,ax;把stacksg地址放到ss中mov ax,stacksgmov ss,axmov sp,10h ;设置栈顶mov si,0 ;si控制行数;外循环6mov cx,6 ;6行 循环6次
s1: push cx ;cx值存入栈mov bx,3 ;从第3个字符开始;内循环3mov cx,3 ;改变3个字母 3次循环
s2: mov al,ds:[si+bx] ;取出and al,11011111b ;改成大写mov ds:[si+bx],al ;放回inc bxloop s2 ;内循环底部pop cx ;cx的值pop回去mov ax,si ;借助axadd ax,10h ;借助ax指向下一行mov si,ax ;ds指向下一行loop s1 ;外循环底部mov ax,4c00hint 21h
codesg ends
end start
这篇关于汇编语言 循环嵌套 将datasg段中每个单词改为大写字母 改进版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!