一、实验目的
1. 理解并掌握汇编源程序组成与结构 2. 掌握汇编语言源程序编写→汇编→链接→调试的工具和方法 3. 理解汇编源程序中地址表示、段寄存器的用法 4. 理解和掌握寄存器间接寻址方式[bx] 5. 通过汇编指令loop的使用理解编程语言中循环的本质
二、实验准备
1. 学习/复习第5章使用[bx]和loop实现循环的编程应用示例(教材5.5节,5.8节) 2. 复习第3章「栈」的知识 3. 结合第4章课件,复习完整汇编源程序编写→汇编→连接→运行→调试的方法 4. 复习8086汇编中内存单元地址的表示,以及段寄存器DS, SS, ES, CS的用途
三、实验内容
1. 实验任务1
使用任意一款文本编辑器,编写8086汇编源程序ex1.asm。源代码如下:
;ex1.asm assume cs:code code segment mov ax,0b810h mov ds,ax mov byte ptr ds:[0],1 mov byte ptr ds:[1],1 mov byte ptr ds:[2],2 mov byte ptr ds:[3],2 mov byte ptr ds:[4],3 mov byte ptr ds:[5],3 mov byte ptr ds:[6],4 mov byte ptr ds:[7],4 mov ah,4ch int 21h code ends end
;ex2.asm assume cs:code code segment mov ax,0b810h mov ds,ax mov bx,0 mov ax,101H mov cx,4 s: mov [bx],ax add bx,2 add ax,101H loop s mov ah,4ch int 21h code ends end
把4改成8 看结果AX由0101+8*0101 = 0909 BX为0+2*8=0010 即以下代码循环8次 cx是计数器寄存器,存放循环次数。
s: mov [bx], ax
add bx, 2
add ax, 101H
loop s
3. 实验任务3
(实验中的问题,仿照ex1,ex2 bx的值仍然设成0,这是愚蠢的,向内存加入字数据内容,字数据占16字节)故 bx需要自加两次)
; ex3.asm assume cs:code code segment mov ax, 0b800h mov ds, ax mov ax, 0237h mov bx,07b8h mov cx, 16 s: mov [bx],ax inc bx inc bx loop s mov ah, 4ch int 21h code ends end
(2)把填充的字数据,从0237H 改成0239H,再次保存后,汇编、链接、运行,观察结果。
(3)把填充的字数据,从0237H 改成0437H,再次保存后,汇编、链接、运行,观察结果。
猜想:高位字节存颜色信息,低位字节存放相应的内容。
;ex4.asm assume cs:code code segment mov ax,0020h mov ds,ax mov bx,0 mov cx,64 s: mov [bx],bl inc bx loop s mov ah,4ch int 21h code ends End
(1)汇编和链接
(2)反汇编
(3)综合使用t,p,g命令
(4)观察结果
5. 实验任务5
教材实验4(3)(P121)
CS中存放的是程序存放的段地址,将cs寄存器中的段地址赋值给ax,再通过ax赋值给ds段寄存器。
;ex5.asm assume cs:code code segment mov ax,cs mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,17h s:mov al,[bx] mov es:[bx],al inc bx loop s mov ah,4ch int 21h code ends end
CX存储整个程序代码所占字节数,要求复制mov ax,4c00h之前的指令,故CX寄存器赋值为17h
原文:https://www.cnblogs.com/lsl722/p/13921409.html