汇编语⾔王爽第四版第七章(实验六)第七章、更灵活的定位内存地址的⽅法
本⽂仅展⽰个别程序的debug图⽚,其实书上代码讲的很详细了,⼤家可以⾃⼰debug看⼀看
7.4⼤⼩写转换问题
;⼤写字母第五位是0,⼩写字母第五位是1
assume cs:codesg, ds:datasg
datasg segment
db 'BaSic'
db 'iNFOrMaTiOn'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax ;ds -> datasg
mov bx,0
mov cx,5
s: mov al,[bx]
and al,11011111B ; 将第五位变成0
mov [bx],al
inc bx
loop s
mov ax,5 ;归位
mov cx,11
s0: mov al,[bx]
or al,00100000B
mov [bx],al
inc bx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
Debug看⼀下
原本数据内存中,显⽰的⼤⼩写是很不均匀,没有规则的
我们执⾏之后查看内存中的内容,发现⼤⼩写已经变换完成
⽤类似于⾼级语⾔中数组的⽅式书写代码assume cs:codefsg, ds,datasg
datasg segment
db 'BaSic'
db 'MinIX'
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s:
mov al,[bx]
and al,1101111b
mov [bx],al
mov al,[5+bx] ;第⼆个字符串
or al,00100000b
mov [5+bx],al
inc bx
loop s
mov ax,4c00h
int 21h
codesg ends
end start
问题7.9
assume cs:code,ds:data,ss:stack stack segment
dw 0,0,0,0,0,0,0,0
stack ends
data segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
data ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
汇编语言大小写字母转换mov ax,data
mov ds,ax
mov bx,0
mov cx,4 ;外层循环的cx
s0:
push cx
mov si,0
mov cx,4
s1:
mov al,ds:[bx+si+3] ;从第三个位置开始and al,11011111b
mov ds:[bx+si+3],al
inc si
loop s1
add bx,16
pop cx
loop s0
mov ax,4c00h
int 21h
code ends
end start
debug如下
成功了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论