1、2、实验要求1. 分别用远过程和DOS中断4CH的两种方式编制完整的汇编语言源程序;2. 掌握汇编语言上机的完整过程:编辑、汇编、连接、运行、调试;3. 使用DEBUG察看并修改寄存器和存储器的内容;4. 使用DEBUG连续运行、单步运行。3、程序设计说明1.程序hbsy1_1功能:根据公式计算z 的值,并将结果存储在result 单元中。算法:1)在数据段中定义两个变量x和y ,并将x赋初值为6,y赋初值为7 2)定义一个适宜大小的堆栈段 3)指令 mov dx,x 实现dx=x;指令 add dx,y 实现 dx=x+y; 指令shl dx,cl实现dx=(x+y)*8(cl的值为3);指
2、令sub dx,x实现dx=(x+y)*8-x; 指令sar dx,1实现dx=(x+y)*8)/2;指令mov result,dx将z的值存储到result单元中。2.程序hbsy1_2 将一位十六进制数转换成相应的ASCII码,并在屏幕上显示出来。1)建立一个数据表TABLE存储0到9,A到F所对应的ASCII码。 2)在数据段中定义一个字节变量HEX存储一位十六进制数。 3)将HEX的值传给AL,再用换码指令XLAT将AL的值换为数据表TABLE中对应的ASCII码。 4)调用相应指令将HEX对应的ASCII码显示出来。 3.程序hbsy1_3将数据段D_SEG中的AUGEND和E_SE
3、G中的ADDEND相加,并把结果存放在数据段D_SEG中的SUM中。1)在数据段D_SEG中定义双字长变量AUGEND,并赋初值为99251 2)在附加段E_SEG中定义双字长变量ADDEND,并赋初值为-15962 3)将AUGEND的低16位传给AX,高16位传给DX。 4)将ADDEND的低16位与AX相加,高16位与DX相加。 5)用高低位的方法将AUGEND与ADDEND相加的结果传给SUM。4、程序调试说明用MASM编译程序hbsy1_1,再用LINK链接程序hbsy1_1:用DEBUG中的R指令显示寄存器的内容:用DEBUG中的D指令显示存储器的内容:用DEBUG中的T指令对程序
4、进行单步调试:用DEBUG中的G指令对程序设置断点进行调试:2.程序hbsy1_2用MASM编译程序hbsy1_2,再用LINK链接程序hbsy1_2:用DEBUG中的相应指令对程序进行调试:用MASM编译程序hbsy1_3,再用LINK链接程序hbsy1_3:4、实验结果与结论程序hbsy1_1运行的结果:程序hbsy1_2运行后,屏幕显示结果为4:程序hbsy1_3运行的结果:5、使用说明 在DOS环境下,进入到程序hbsy1_1.exe 所在的目录下,然后输入“hbsy1_1.exe”回车,就可以运行程序hbsy1_1.exe。在DOS环境下,进入到程序hbsy1_2.exe 所在的目录
5、下,然后输入“hbsy1_2.exe”回车,运行程序hbsy1_2.exe,屏幕上显示字符“4”。在DOS环境下,进入到程序hbsy1_3.exe 所在的目录下,然后输入“hbsy1_3.exe”回车,就可以运行程序hbsy1_3.exe。6、实验中遇到的问题及解决方法1.1)在编译程序hbsy1_3时15-20行出现错误“Illegal size for operand”:2)进入源程序,找到对应的行,发现在传值的时候没有注意源操作数与目的操作数的长度应保持一致:3)修改相应错误后,程序编译通过:7、程序源代码data segment x dw 6 y dw 7 result dw ?dat
6、a endssta1 segment para stack dw 20h dup(0)sta1 endscode segmentproc1 proc far assume cs:code,ds:data,ss:sta1start: push ds xor ax,ax push ax mov ax,data mov ds,ax mov dx,x add dx,y mov cl,3 shl dx,cl sub dx,x sar dx,1 mov result,dx retproc1 endpcode endsend starttable db 30h,31h,32h,33h,34h,35h db
7、36h,37h,38h,39h db 41h,42h,43h,44h,45h,46hhex db 4ascii db ? mov bx,offset table mov al,hex xlat table mov ascii,al mov dl,al mov ah,2 int 21h mov ah,4chd_seg segment augend dd 99521 sum dd ?d_seg endse_seg segment addend dd -15962e_seg endsc_seg segmentc_seg,ds:d_seg,es:e_seg mov ax,d_seg mov ax,e_seg mov es,ax mov ax,word ptr augend mov dx,word ptr augend+2 add ax,word ptr addend add dx,word ptr addend+2 mov word ptr sum,ax mov word ptr sum+2,dxc_seg ends完成日期:_2012.03.23_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1