1、(3) 下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。codecode segment mov ax,code ;code为所填写的数据 mov es,ax mov cx,18h ;18h为所填写的数据 mov al,bx mov es:bx,alcode ends dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hstart: mov ax,0 mov cx,8 mov ax,bx mov cs:bx,ax ;此条指令为所填指令 add bx,2end start(2) d
2、w 0,0,0,0,0 mov ax,cs ;cs为所填第一空 mov ss,ax mov sp,1ah ;此条指令为所填第二空 push bx pop cs:bx ;此条指令为所填第三空实验5 编写、调试具有多个段的程序(第123页)1.保持不变2.3.X-2,X-14.(N/16+1)*16 说明:N/16只取整数部分(3)3.X+3,X+4(5)完整程序如下:a segment db 1,2,3,4,5,6,7,8a endsb segmentb endsc segment db 0,0,0,0,0,0,0,0c ends start:mov ax,a mov ax,c s1:mov a
3、x,es:bx add bx,ax loop s1 mov ax,b s2: loop s2 end start(6)完整程序如下: dw 1,2,3,4,5,6,7,8 dw 0,0,0,0,0,0,0,0 mov sp,10h mov ax,a实验6 实践课程中的程序(第147页)(2)编程:完成问题中的程序。问题7.9完整程序如下:codesg,ss:stacksg,ds:datasgstacksg segmentstacksg endsdatasg segment db 1. display 2. brows 3. replace 4. modify datasg ends mov a
4、x,stacksg mov sp,16 mov ax,datasg mov cx,4 ;外循环 push cx mov si,3 s0:内循环 mov al,bx+si and al,11011111b mov bx+si,al inc si loop s0 add bx,16 pop cxloop smov ax,4c00hint 21h实验7 寻址方式在结构化数据访问中的应用(第160页)完整程序如下:codesg,ds:data,es:tabledata segment1975,1976197719781979198019811982198319841985198619871988198
5、9199019911992199319941995以上是表示21年的21个字符串 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000以上是表示21年公司总收的21个dword型数据 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,45257,17800 d
6、ata endstable segment db 21 dup(year summ ne ? )table ends mov ax,data mov ax,table mov si,0 mov di,0 mov cx,21 s:进入循环di,al mov al,bx+1di+1,al mov al,bx+2di+2,al mov al,bx+3di+3,al以上8句的作用是存放年份 mov ax,54hbx ;第一个年收入的段基址为54H mov dx,56hbx5hdi,ax7hdi,dx以上4句的作用是存放公司总收入 mov ax,0A8hsi ;人数的段基址为0A8H0Ahdi,ax以上
7、2句是存放公司的人数 mov ax,54hbx div word ptr ds:0A8hsi0dhdi,ax以上3句是存放人均收入 add bx,4 add si,2 add di,16以上3句是为下一次循环时存放数据做准备3个寄存器递增的速度决定了所要存取的数据的位置的偏移地址 loop s ;跳到标号s处实验8 分析一个奇怪的程序(第174页)分析下面的程序,在运行前思考:这个程序可以正确返回吗?运行后再思考:为什么是这种结果?通过这个程序加深对相关内容的理解。 nop nop mov di,offset s mov si,offset s2 mov ax,cs:sidi,axs0: jm
8、p short ss1:s2: jmp short s1程序可以正常返回。详细分析:在此题中较为深入地考察了段内直接短转移形如:jmp short 标号的概念。我们知道程序中:mov di,offset smov si,offset s2mov ax,cs:mov cs:实验9 根据材料编程(第175页)code,ds:data,ss:stackwelcome to masm!定义要显示的字符串(共16字节) db 02h,24h,71h ;定义三种颜色属性data endsstack segment dw 8 dup(0)stack ends mov ax,stack mov ax,0b87
9、2h ;算出屏幕第12行中间的显存的段起始位置放入ax中 mov cx,3 ;外循环为3次,因为要显示三个字符串s3: push cx ;三个进栈操作为外循环s3保存相关寄存器的值 push ax ;以防止它们的值在内循环中被破坏 push di mov es,ax ;此时es为屏幕第12行中间的显存的段起始位置 mov cx,10h ;内循环为10h次,因为一个字符串中含10h个字节 mov al,ds:bx+sibx+di,al add di,2 loop s1 ;此循环实现偶地址中存放字符 mov si,1 ;si的值设为1,从而为在显存奇地址中存放字符的颜色属性做准备 pop di ;
10、将di的值恢复成进入内循环之前的时候的值10hbx+di ;取颜色属性源OP寻址方式:相对基址变址第二个内循环也为10h次bx+si,al loop s2 ;此循环实现奇地址中存放字符的颜色属性 以下4句为下一趟外循环做准备 inc di pop ax add ax,0ah ;将显存的段起始地址设为当前行的下一行在段地址中加0ah,相当于在偏移地址中加了0a0h(=160d) loop s3 实验10 编写子程序(第194页)1.显示子程序Welcome to masm!,0 assume cs:data mov dh,1 ;dh装行号(范围:1-25) mov dl,1 ;dl装列号(范围:
11、1-80)注:每超过80等于行号自动加1 mov cl,0cah ;cl中存放颜色属性(0cah为红底高亮闪烁绿色属性) call show_str int 21h show_str:显示字符串的子程序定义开始 push si mov al,0A0h dec dh ;行号在显存中下标从0开始,所以减1 mul dh mov bx,ax mov al,2 mul dl sub ax,2 ;列号在显存中下标从0开始,又因为偶字节存放字符,所以减2 add bx,ax ;此时bx中存放的是行与列号的偏移地址 mov ax,0B800hes中存放的是显存的第0页(共0-7页)的起始的段地址 mov a
12、l,cl mov ch,0 mov cl,ds: jcxz okbx+di,cl ;偶地址存放字符bx+di+1,al ;奇地址存放字符的颜色属性ok: pop si ret ;显示字符串的子程序定义结束2.解决除法溢出的问题(第197页)code,ss: mov ax,4240h mov dx,0fh mov cx,0ah call divdw divdw: ;子程序定义开始 push ax mov ax,dx mov dx,0 div cx mov cx,dx mov dx,bx子程序定义结束 3.数值显示(第198页) db 10 dup (0) mov ax,12666 mov bx,
13、data mov ds,bx call dtoc mov dh,8 mov dl,3 mov cl,0cahdtoc:数值显示的子程序定义 push dx push bx mov cx,10d div cx mov cx,ax jcxz s2 add dx,30h inc bx ;再进行一次栈操作(补充当商为零而余数不为零时的情况) mov cx,bx mov si,al loop s3okay: pop bx pop dx数值显示的子程序定义结束显示字符串的子程序已经在第一题中说明,在此不再赘述。 dec dh sub ax,2 add bx,axbx+di,clbx+di+1,al ret实验11 编写子程序(第224页) db Beginners All-purpose Symbolic Instruction Code.begin: call lettercletterc:子程序部分开始 mov al,si cmp al,0 je exitsub cmp al,61h ;61h为a的ASCII码 jb next cmp al,7ah ;7ah为z ja next and al,11011111B ;或使用sub al,20hnext: jmp short s0exitsub:子程序部分结束end begin
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1