1、熟悉并掌握CPU的寻址方式;
2、能灵活应用不同的寻址方式设计程序。
Debug
实验内容
1、 将教材中所有讲解过的程序上机调试,用Debug 跟踪其执行过程,进一步理解不同的寻址方式。(以教材问题7.9的程序为例子:)
实验代码:
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
????dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
????db '1. display ?????'
????db '2. brows ???????'
????db '3. replace ?????'
????db '4. modify ??????'
datasg ends
codesg segment
start: mov ax,stacksg
?????????mov ss,ax
?????????mov sp,16
?????????mov ax,datasg
?????????mov ds,ax
?????????mov bx,0
?????????mov cx,4
??????s: push cx
?????????mov si,3
?????????mov cx,4
?????s0:mov al,[bx+si]
?????????and al,11011111b
?????????mov [bx+si],al
?????????inc si;
?????????loop s0
?????????pop cx
?????????add bx,10h
?????????loop s
?????????mov ax,4c00h
?????????int 21h
codesg ends
end start
运行结果:
3、寻址方式在结构化数据访问中的应用:
已定义好数据,编程,实现将data段中的数据按指定格式写入到table段中,并计算每年的人均收入(取整),结果也保存在相应的table段中。
data segment
year ??db '1975','1976','1977','1978','1979','1980', '1981','1982','1983'
……..
???db '1993','1994','1995'
;以上是表示年份的21个字符串
receipts dd 16,22,382,1356,2390,8000, 16000,24486,50065,97479,140417,197514
…….
;以上是表示21年公司总收入的21个dword型数据
staff_num dw 3,7,9,13,28,38,130,220,476,778,1001,1442
……….
;以上是表示21年公司雇员人数
data ends
table segment
???db 12 dup ('year summ ne ?? ') ?
table ends
table表格式如下:
实验代码
assume cs:codesg
data segment
????db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
????db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
????db '1993','1994','1995'
????dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
????dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
????dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
????dw 11542,14430,15257,17800
data ends
table segment
????db 21 dup('year summ ne ?? ')
table ends
codesg segment
start : mov ax,data
???????????mov ds,ax
???????????mov ax,table
???????????mov es,ax
???????????mov bx,0
???????????mov si,0
???????????mov di,0
???????????mov cx,21
????????s: mov al,[bx]
????????????mov es:[di],al
????????????mov al,[bx+1]
????????????mov es:[di+1],al
????????????mov al,[bx+2]
????????????mov es:[di+2],al
????????????mov al,[bx+3]
????????????mov es:[di+3],al
????????????mov ax,54h[bx]
????????????mov dx,56h[bx]
????????????mov es:5h[di],ax
????????????mov es:7h[di],dx
????????????mov ax,0A8h[si]
????????????mov es:0Ah[di],ax
????????????mov ax,54h[bx]
????????????div word ptr ds:0A8h[si]
????????????mov es:0dh[di],ax
????????????add bx,4
????????????add si,2
????????????add di,16
????????????loop s
????????????mov ax,4c00h
????????????int 21h
codesg ends
end start
运行结果
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。