无锡装修网站/新闻头条今天最新消息
第七章、更灵活的定位内存地址的方法
汇编语言所有实验地址
本文仅展示个别程序的debug图片,其实书上代码讲的很详细了,大家可以自己debug看一看
7.4大小写转换问题
;大写字母第五位是0,小写字母第五位是1
assume cs:codesg, ds:datasgdatasg segmentdb 'BaSic' db 'iNFOrMaTiOn'
datasg endscodesg segment
start: mov ax,datasgmov ds,ax ;ds -> datasgmov bx,0mov cx,5s: mov al,[bx]and al,11011111B ; 将第五位变成0mov [bx],alinc bxloop s mov ax,5 ;归位mov cx,11s0: mov al,[bx]or al,00100000Bmov [bx],alinc bxloop s0mov ax,4c00hint 21hcodesg ends
end start
Debug看一下
原本数据内存中,显示的大小写是很不均匀,没有规则的
我们执行之后查看内存中的内容,发现大小写已经变换完成 😃
用类似于高级语言中数组的方式书写代码
assume cs:codefsg, ds,datasgdatasg segmentdb 'BaSic'db 'MinIX'datasg endscodesg segment
start:mov ax,datasgmov ds,axmov bx,0mov cx,5s:mov al,[bx]and al,1101111bmov [bx],almov al,[5+bx] ;第二个字符串or al,00100000bmov [5+bx],alinc bxloop smov ax,4c00hint 21h
codesg ends
end start
问题7.9
assume cs:code,ds:data,ss:stack
stack segmentdw 0,0,0,0,0,0,0,0
stack endsdata segmentdb '1. display 'db '2. brows 'db '3. replace 'db '4. modify '
data endscode segment
start:
mov ax,stack
mov ss,ax
mov sp,16mov ax,data
mov ds,axmov bx,0
mov cx,4 ;外层循环的cxs0:
push cx
mov si,0mov cx,4
s1:
mov al,ds:[bx+si+3] ;从第三个位置开始
and al,11011111b
mov ds:[bx+si+3],al
inc si
loop s1add bx,16
pop cx
loop s0mov ax,4c00h
int 21h
code ends
end start
debug如下
成功了 😃 😃 😃 😦😦😦