东华大学微机实验报告答案(软件) (3000字)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
实验一 debug的启动及其基本命令的使用实验二内存操作数及寻址方法实验
三汇编语言程序的调试与运行实验四查表程序设计实验五系统功能调用实验六
分支程序设计实验七循环程序设计实验八子程序设计实验九综合程序设计实验心
得体会参考文献
实验一 debug的启动及其基本命令的使用
源程序:(指导书中给出)
data segment
string1 db move the cursor backwardstring2 db move the cursor backwardmess1 db match.,13,10,$mess2 db no match.,13,10,$ data ends
stack segment stackdb 40 dup (?) stack ends
prognam segment
assume cs:prognam,ds:data,es:data,ss:stack
main proc far start: push dsxor ax,ax push ax
mov ax,datamov ds,axmov es,axmov ax,stackmov ss,ax
lea si,string1lea di,string2cld
mov cx,25repz cmpsbjz match
lea dx,mess2jmp short disp match: lea dx,mess1 disp:mov ah,09hint 21h ret
main endp prognam ends end start
运行结果:
用debug调试将输出字符串改为‘no match’
用e指令修改“backward”为“forward”
再次用d命令查看修改结果。
用g命令运行程序
实验二内存操作数及寻址方法
1、(1)程序说明:设堆栈指针sp=2000h,ax=3000h,bx=5000h;请编一程序段将ax
和bx的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用字处理程序编辑
程序。
(2)调试说明:对sp的地址分配不到2000,计算机自动分配为0000,此时我就人为的把
堆栈的首地址定义为2000。(3)写出源程序清单和执行结果:
源程序:
stack segment stack dw 100 dup(0) stack ends code segment
assume ss:stack,cs:code start:mov ax,3000h mov bx,5000h mov sp,2000h
push ax ;将ax中的内容压栈 mov ax,bx ;bx中的内容给ax pop bx
mov ah,4ch int 21h code ends
end start
用debug调试结果:
2、程序说明:用masm和link 对以下程序进行汇编和连接,调试程序在debug调试程
序状态下进行。用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,
ax中的内容是什么。
源程序:
data segmentorg 0300h
a d
b 12h,23h,34h,45h,56h,67h,78h,89h,9ah data ends
prognam segment
assume cs:prognam,ds:data start: mov ax,datamov ds,ax
mov bx,0300h
mov ax,0300h ;立即数寻址
mov ax,[0300h] ;存储器寻址方式中的直接寻址方式mov ax,[bx] ;寄存器间接寻
址mov si,2
mov ax,0001[bx];基址寻址mov ax,[bx][si] ;基址加变址
mov ax,0001[bx][si] ;带偏移量的基址加变址mov ah,4chint 21h prognam ends end start
用debug调试结果:
实验三算术运算指令
1、程序说明:编写三个完整的汇编语言源程序,完成以下计算。其中x、y、z、r、
w均为存放16位带符号数单元的地址。
(1)z←w+(z-x)
(2)z←w-(x+6)-(r+9)
(3)z←(w*x)/(y+6),r←余数
2、调试说明:当编译完成后,计算机未能生成.obj的文件,经检查错误发生在add使用上,我把两个寄存器操作数同时用在add语句里,结果出错了。把add语句稍作写该后,程
序运行正确。
3、写出源程序清单和执行结果
本实验我们只做前两个,即:(1)z←w+(z-x);(2)z←w-(x+6)-(r+9)
源程序:
(1) z←w+(z-x)
data segment
x dd 0001h
z dd 0003h
w dd 0005h
data ends
code segment
assume cs:code, ds:data
start: mov ax,data
mov ds,ax
mov ax,x
mov bx,z
sub bx,ax
mov ax,w
add bx,ax
mov z,bx
mov ah,4ch
int 21h
code ends
end start
用debug调试结果:
源程序:
(2)z←w-(x+6)-(r+9)
data segment
x dw 0006h
r dw 003ah
w dw 0110h
z dw ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov ax,x
add ax,6
mov bx,r
add bx,9
mov cx,w
sbb cx,ax
sbb cx,bx
mov z,cxmov ah,4ch
int 21h
code ends
end start
用debug调试结果:
实验四查表程序设计
1、程序说明:用查表的方法将一位十六进制数转换成与它相应的ascii码,并将结果存放到asci单元中。
2、调试说明:开始生成.obj文件时,调试不成功,以为是程序编译有误,后经再三检查都未发现错误,这时只好从头做检查,结果发现了错误:从本实验有的提示语段中拷贝过来的语句书写有误,即符号的书写为中文书写,以至于整个程序未能通过编译。把中文书写修改为英文书写后,编译成功。
3、源程序清单和执行结果:
源程序: