本文主要是介绍汇编语言(王爽 第三版)实验6,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1,数据以字符形式给出
assume cs:code,ds:datadata segmentdb 'unIX'db 'foRK'
data ends
code segmentstart: mov al,'a'mov bl,'b'mov ax,4c00hint 21h
code ends
end start
2,大小写转换问题
ASCII码第五位置‘0’变成大写字母, 置‘1’变成小写字母
assume cs:codesg, ds:datasgdatasg segmentdb 'BaSiC'db 'iNfOrMaTiOn'
datasg endscodesg segmentstart: mov ax,datasgmov ds,axmov bx,0mov cx,5s:mov al,[bx]and al, 11011111Bmov [bx],alinc bxloop smov bx,5mov cx,11s0:mov al,[bx]or al, 00100000Bmov [bx],alinc bxloop s0mov ax, 4c00hinc 21h
codesg ends
end start
SI和DI,数据复制
assume cs:codesg,ds:datasg
datasg segmentdb 'welcome to masm!'db '................'
datasg endscodesg segmentstart:mov ax,datasgmov ds,axmov si,0mov di,16mov bx,0mov cx,8s: mov ax, [si]mov [di],axadd si,2add di,2loop smov ax,4c00hint 21h
codesg endsend start
更少代码,更简洁实现数据复制
assume cs:codesg,ds:datasg
datasg segmentdb 'welcome to masm!'db '................'
datasg endscodesg segmentstart:mov ax,datasgmov ds,ax mov si,0mov cx,8s: mov ax, 0[si]mov 16[si],axadd si,2loop smov ax,4c00hint 21h
codesg ends
end start
将datasg段中每个单词改为大写字母
assume cs:codesg,ds:datasg
datasg segmentdb 'ibm 'db 'dec 'db 'dos 'db 'vax '
datasg endscodesg segmentstart:mov ax,datasgmov ds,ax mov bx,0mov cx,4s0: mov dx,cxmov si,0mov cx,3 s:mov al,[bx+si]and al,11011111bmov [bx+si],alinc siloop smov cx,dxadd bx,16loop s0mov ax,4c00hint 21h
codesg ends
end start
通用的一个方案来暂存数据(这个程序遇到的问题),
1,用空闲的寄存器
2,同空闲的内存
3,用栈
将datasg段中每个单词的前4个字母改写为大写字母。
assume cs:codesg,ds:datasgstacksg segmentdw 0,0,0,0,0,0,0,0
stacksg endsdatasg segmentdb '1. display 'db '2. brows 'db '3. replace 'db '4. modify '
datasg endscodesg segmentstart:mov ax, stacksgmov ss,axmov sp,16mov ax,datasgmov ds,ax mov bx,0mov cx 4s0:push cxmov cx 4mov si 0s:mov bl,[bx+si+3]and bl,11011111bmov [bx+si+3],bladd si,1loop s0pop cxadd bx,16loop s0mov ax,4c00hint 21h
codesg ends
end start
这篇关于汇编语言(王爽 第三版)实验6的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!