西安郵電學院
汇编语言程序设计报告
一. 设计目的
熟悉Emu8086并掌握其用法;理解8086的寻址方式,熟悉8086指令系统的常用指令,了解8086汇编语言程序的格式和上机过程,掌握顺序程序设计方法。 二. 设计内容
假设在数据段X_SEG、附加段Y_SEG和堆栈段Z_SEG中分别定义了字变
量X、Y和Z,试编制一个程序计算X←X+Y+Z。
写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的
AUGEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG段中的SUM中。其中,AUGEND、ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为-15962
三.详细设计
重点设计及编码。
1、x_seg segment ;定义数据段 x dw 10H x_seg ends
y_seg segment ;定义附加段 y dw 11H y_seg ends
z_seg segment stack ;定义堆栈段 z dw 12H z_seg ends
code_seg segment ;代码段
assume cs:code_seg,ds:x_seg,es:y_seg,ss:z_seg start:
mov ax,x_seg ; 将数据段放入ds
mov ds,ax
mov ax,y_seg ;将附加段放入es
mov es,ax
mov ax,z_seg ;将堆栈段放入ss mov ss,ax
mov ax,x
add ax,es:y ;计算x+y,并把结果放入ax add ax,ss:z ;计算x+y+z, 并把结果放入ax mov x,ax ;;把x+y+z的结果放入x
MOV BX, x ;打印结果 MOV CH,4 MOV DH,1 AA:
MOV CL,4 ROL BX,CL MOV AL,BL
AND AL,0fH ADD AL,30H CMP AL,3AH JL PRINT ADD AL,07H PRINT:
MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ AA
mov ah,4ch ;返回dos int 21h code_seg ends end start
2、D_SEG segment ;定义数据段 AUGEND dd 99251 SUM dd ? D_SEG ends
E_SEG segment ;定义附加段 ADDEND dd -15962 E_SEG ends
C_SEG segment ;代码段
assume cs:C_SEG,ds:D_SEG,es:E_SEG start
mov ax,D_SEG mov ds,ax
mov ax,E_SEG mov es,ax
mov ax,word ptr [AUGEND] ;取AUGEND的低16位放入ax add ax,word ptr es:[ADDEND] ;取ADDEND的低16位和AUGEND
的低16位相加
mov dx,word ptr [AUGEND+2] ;取AUGEND的高16位放入dx adc dx,word ptr es:[ADDEND+2] ;取ADDEND的高16位和AUGEND
的高16位相加,如低16为有进位,加上进位
mov word ptr [SUM],ax ;相加和的低16为放入[SUM]的低16位 mov word ptr [SUM+2],dx ;相加和的高16为放入[SUM]的高16位 MOV CH,4 ;打印 MOV DH,1 AA:
MOV CL,4
ROL BX,CL MOV AL,BL AND AL,0fH ADD AL,30H CMP AL,3AH JL PRINT ADD AL,07H PRINT: MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ AA
MOV BX,WORD PTR [SUM] MOV CH,4 DEC DH JZ AA
mov ah,4CH ;返回dos int 21H C_SEG ends
end start
四.测试数据及运行结果
1、点击Single Step单步运行程序,查看执行结果
运行结果如图:
2、使用masm对程序进行汇编:
使用link命令生成可执行文件:
执行1_2.exe程序,结果如下:
五.调试情况,设计技巧及体会
1.对自己的设计进行评价,指出合理和不足之处,提出改进方案; 2.对设计及调试过程的心得体会。
这是我们第一次自学一门语言,汇编语言是低级语言,和以前学的高级语言很不相同,在学习的过程中遇到很多问题,编程序也不知道从哪里入手,后来看汇编教程,在网上查一些资料,通过上机调试,一步步运行出了结果。第一次程序比较简单,但是在编程的过程中还是遇到很多问题,比如打印结果的过程, 刚开始的代码就打印出错。通过逐步调试,一步步打印出结果 。