(完整版)汇编语言实验报告5574277

更新时间:2024-06-07 07:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

合肥工业大学 计算机与信息学院

实验报告

课 程:汇编语言程序设计

专业班级:

学 号:

姓 名:

实验一 Debug程序的使用

一. 实验目的

1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二. 实验内容

1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。 要求:

本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 三. 实验过程和程序 1.

e ds:0200 78 56 34 12 e ds:0204 98 BA DC FE 2.

直接寻址: mov ax,[0200] mov bx,[0202] add ax,[0204] adc bx,[0206]

mov [0208 ],ax mov [020a],bx 间接寻址: mov si,[0200] mov di,[0204] mov bx,[0208] mov ax,[si] mov dx,[si+2] add ax,[di] adc dx,[di+2] mov [bx],ax mov [bx+2],dx 附加题1 e ds:0000 1c 02 e ds:0002 01 00 e ds:0004 FF FF e ds:0006 38 04 e ds:0008 00 00

Microsoft Windows [???? 6.1.7600]

???????? (c) 2009 Microsoft Corporation???????????????? C:\\Users\\Administrator>debug -e ds:0000 1c 02 -e ds:0002 01 00 -e ds:0004 FF FF -e ds:0006 38 04

-e ds:0008 00 00 -a

13B3:0100 mov ax,[0000] 13B3:0103 mov bx,[0002] 13B3:0107 imul bx 13B3:0109 mov cx,ax 13B3:010B mov bx,dx 13B3:010D mov ax,[0004] 13B3:0110 cwd 13B3:0111 add cx,ax 13B3:0113 adc bx,dx 13B3:0115 sub cx,21c 13B3:0119 sbb bx,0 13B3:011C mov ax,[0006] 13B3:011F cwd 13B3:0120 sub ax,cx 13B3:0122 sbb dx,bx 13B3:0124 mov bx,[0000] 13B3:0128 idiv bx 13B3:012A mov [0008],ax 13B3:012D -g =0100 012d

AX=0002 BX=021C CX=FFFF DX=0001 SP=FFEE BP=0000 SI=0000 DI=0000

DS=13B3 ES=13B3 SS=13B3 CS=13B3 IP=012D NV UP EI PL

mov si,8 sub si,cx shl si,1 jmp addrtbl[si] l0: lea dx,s0 jmp output l1: lea dx,s1 jmp output l2: lea dx,s2 jmp output l3: lea dx,s3 jmp output l4: lea dx,s4 jmp output

转移表方法:

Data segment x db 80h

addrtbl dw l0,l1,l2,l3,l4,l5,l6,l7

l5: lea dx,s5 jmp output l6: lea dx,s6 jmp output l7: lea dx,s7 jmp output l:

loop again output: mov ah,9h int 21h mov ah,4ch int 21h

Code ends

end start

s0 db 'The 0 Bit is 1.$' s1 db 'The 1 Bit is 1.$' s2 db 'The 2 Bit is 1.$'

s3 db 'The 3 Bit is 1.$' s4 db 'The 4 Bit is 1.$' s5 db 'The 5 Bit is 1.$' s6 db 'The 6 Bit is 1.$' s7 db 'The 7 Bit is 1.$' Data ends Code segment

assume cs:code, ds:data

start: mov ax,data mov ds,ax mov cx,8 mov bl,x again: shr bl,1 jnc l mov si,8 sub si,cx l:

loop again lea ax,jmptbl mov cx,si shl si,1 add si,cx add ax,si

jmp ax jmptbl: jmp near ptr l0 jmp near ptr l1 jmp near ptr l2 jmp near ptr l3 jmp near ptr l4 jmp near ptr l5 jmp near ptr l6 jmp near ptr l7 l0: lea dx,s0 jmp output l1: lea dx,s1 jmp output l2: lea dx,s2 jmp output l3: lea dx,s3 jmp output l4: lea dx,s4 jmp output

l5: lea dx,s5 jmp output l6: lea dx,s6 jmp output l7: lea dx,s7 2.

Data segment x dw 1 y dw 2 z dw 0

Data ends Code segment

assume cs:code, ds:data

start: mov ax,data mov ds,ax sub sp,4 push y push x call f pop z

jmp output output: mov ah,9h int 21h mov ah,4ch int 21h Code ends

end start

mov ah,4ch int 21h

f proc near push bp mov bp,sp push si push dx push cx push bx push ax mov ax,[bp+4] mov cx,ax mov bx,[bp+6] imul bx

mov si,0 add ax,cx adc dx,si mov si,0 sub ax,bx sbb dx,si

四. 实验结果 1.

地址表方法:

BL中存储的数为: 10h 输出结果为: The 4 bit is 1. 转移表方法:

BL中存储的数为: 80h 输出结果为: The 7 bit is 1. 2.

五. 实验体会

mov [bp+8],ax mov [bp+10],dx ret 4 f endp Code ends

end start

通过本次试验,掌握了分支和子程序结构和设计方法;实现了转移表以及地址表的创建及调用,以及几种参数传递的方式,进一步熟悉了在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

实验四 汇编语言高级编程专题

一. 实验目的

1、汇编语言宏程序设计; 2、 掌握中断服务子程序的编写。 3、 汇编语言与高级语言的混编。

二. 实验内容

1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min 2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。 三. 实验过程和程序 1.

MIN3 macro x,y,z,min mov al,x mov bl,y mov cl,z cmp al,bl jc l1 cmp bl,cl jc l2 mov min,cl jmp exit l1: cmp al,cl jc l3 mov min,cl jmp exit l2: mov min,bl jmp exit l3: mov min,al exit: endm

Data segment

x db 03h y db 02h z db 01h min db ?

Data ends Code segment

assume cs:code, ds:data

start: mov ax,data mov ds,ax MIN3 x,y,z,min add min,30h mov dl,min mov ah,02h int 21h mov ah,4ch int 21h

Code ends end start

2.

INTNO EQU 1CH USEINT = 59 DATA SEGMENT OLDISR DW ?,? TIMER DB 100 COUNTER DW 60 ISDONE DB 0 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:

MOV AX,DATA MOV DS,AX

MOV AX,0 MOV ES,AX

;PROTECT IF USEINT MOV AL, INTNO MOV AH,35H INT 21H ;ES:BX

MOV OLDISR[0], BX

MOV AX,ES

MOV OLDISR[2], AX ELSE CLI

MOV AX, ES:[INTNO*4] MOV OLDISR[0],AX MOV AX,ES:[INTNO*4+2] MOV OLDISR[2], AX STI ENDIF

;SET NEW ISR IF USEINT PUSH DS

MOV AX, SEG ISR MOV DS,AX

MOV DX, OFFSET ISR MOV AL, INTNO MOV AH, 25H INT 21H POP DS ELSE CLI

MOV WORD PTR ES:[INTNO*4], OFFSET ISR

MOV

WORD

PTR

MOV AX,OLDISR[2] MOV ES:[INTNO*4+2],AX ES:[INTNO*4+2],SEG ISR STI ENDIF

;WAIT HERE WAITHERE: CMP ISDONE,1 JNZ WAITHERE

EXIT: ;RESTORE IF USEINT PUSH DS

MOV DX,OLDISR[0] MOV AX,OLDISR[2] MOV DS,AX MOV AL, INTNO MOV AH, 25H INT 21H POP DS ELSE CLI

MOV AX,OLDISR[0] MOV ES:[INTNO*4],AX

STI ENDIF

MOV AX,4C00H INT 21H ISR PROC FAR PUSH DX PUSH AX

MOV AX,DATA MOV DS,AX

STI 套

HERE

INC TIMER AGAIN: CMP 1000/55 ;18 JB DONE MOV TIMER,0

;便于中断嵌;COUNT TIMER,

;carriage

MOV AH,2 MOV DL,13 INT 21H

;print time MOV AX,COUNTER MOV DL,10 DIV DL MOV DH,AH MOV DL,AL MOV AH,2 ADD DL,30H INT 21H MOV DL,DH ADD DL,30H INT 21H

DEC COUNTER JGE DONE MOV ISDONE,1 DONE:

PUSHF

CALL DWORD PTR OLDISR CLI POP AX POP DX

IRET ;中断返回 ISR ENDP CODE ENDS END START

四. 实验结果 1.

输入:x,y,z分别是03h 02h 01h 输出:1 2.

五. 实验体会

通过本次试验熟悉了汇编语言宏程序设计;掌握中断服务子程序的编写,其中应注意恢复原中断指令,将ds重新指向数据段。

本文来源:https://www.bwwdw.com/article/dw26.html

Top