当前位置:文档之家› 合肥工业大学汇编语言实验报告

合肥工业大学汇编语言实验报告


Mov bx,y
Imul bx
Mov cx,ax Mov bx,dx Mov ax,z Cwd Add cx,ax Adc bx,dx Sub cx,720 Sbb bx,0 Mov ax,v Cwd Sub ax,cx Sbb dx,bx Mov bx,x Idiv bx Mov sum1,ax Mov sum2,dx
mov dl,23h ;"#"
mov ah,2 int 21h
mov bx,sum2 mov ch,4 mov cl,4 again1: rol bx,cl mov dl,bl and dl,0fh cmp dl,0ah jl next1 add dl,37h ;"A"-"F" jmp down1 next1: add dl,30h ;"0"-"9" down1: mov ah,2 int 21h dec ch jnz again1
mov dl,23h ;"#"分开不同数据 mov ah,2 int 21h
mov bl,avg2 ;平均值的余数 call sub
mov dl,23h ;"#"分开不同数据 mov ah,2 int 21h
mov bl,max ;最大值 call sub
mov dl,23h ;"#"分开不同数据 mov ah,2 int 21h
–G =100 0116 ↙ 9、再用“D”命令观察 DS:0200H~DS:020BH 字节单元中的内容
–D 200 20B↙ 10、用“T”单步操作命令对源程序单步执行,观察 AX、BX、CS、IP 寄存器内容的变
化,并与预计的结果相比较。
四. 实验结果(包括必要的截图)
五. 实验体会 这次的实验让我学会了 DEBUG 的运用,了解到了 DEBUG 对于程序的调试
mov bl,min ;最小值 call sub
mov ax,4c00h int 21h
sub proc
mov ch,2 mov cl,4 again2: rol bl,cl mov al,bl and al,0fh
cmp al,0ah jl next2 add al,37h ;"A"-"F" jmp down1 next2: add al,30h ;"0"-"9" down1: mov dl,al mov ah,2 int 21h dec ch jnz again2 ret sub endp code ends end start
合肥工业大学 计算机与信息学院
实验报告
课 程:汇编语言程序设计 专业班级:计算机科学与技术 13-1 班 学 号:梁壮壮 姓 名: 2013211622
实验一 Debug 程序的使用
一. 实验目的 1、熟悉 DEBUG 程序中的命令,学会在 DEBUG 下调试运行汇编语言源程序。 2、掌握 8086/8088 的寻址方式及多字节数据的处理方法。
start: mov ax,data
mov ds,ax
lea dx,buf
;输入字符串
mov ah,10
int 21h
lea dx,crlf
;输出换行
mov ah,9
int 21h
mov bl,buf+1 mov bh,0 mov byte ptr buf+2[bx], '$' lea dx,buf+2 mov ah,9 ;输出字符串 int 21h
6、程序未执行前,用“R”命令观察,相关寄存器的内容。 –R↙
如:(AX)= ,(BX)= ,(SI)= , (DI)= ,(CS)= ,(IP)= 。
7、在程序未执行前,用“D”命令观察 DS:0200H,DS:0204H、DS:0208H 单元的内 容
–D 200 20B ↙ 8、用“G”命令运行源程序
3. data segment buf db 50 ;定义缓冲区 db 40 db 40 dup(0) crlf db 0dh,0ah,'$' ;回车换行 data ends
stack segment stack db 100 dup(0) stack ends
code segment
assume ds:data, ss:stack, cs:code
三. 实验过程和程序
程序:
1.
Data segment
X dw 1
Y dw 720
Z dw -1
V dw 1
Sum1 dw ?
Sum2 dw ?
Data ends
Code segment
Assume cs:code ds:data
Start:
mov ax,data
Mov ds,ax
Mov ax,x
;x*y
;计算字符串实际字符个数 ;在串尾补入'$'
mov ah,4ch int 21h code ends
end start
四. 实验结果(包括必要的截图) 第 1 题截图
第 2 题截图
第 3 题截图
五. 实验体会 在这一次的实验中用到 CBW 和 CWD 命令来扩展符号位,解决处理数据的
时候数据类型不匹配的问题。同时也学到了从键盘上读取字符以及打印字符的 方法。
二. 实验内容 1、利用 DEBUG 程序中的“E”命令,将两个多字节数“003F1AE7H”和 “006BE5C4H”分别送入起始地址为 DS:0200H 和 DS:0204H 两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将 DS:0200H 单元和 DS:0204H 单元中的数据相加,并将运算结果存放在 DS:0208H 单元中。 要求:
功能。
实验二 汇编语言程序设计(顺序、循环)
一. 实验目的
1、掌握顺序和循环程序结构和设计方法; 2、熟悉在 PC 机上建立、汇编、连接、调试和运行 8086/8088 汇编语言程序的过程。
二. 实验内容 1、X、Y、Z、V 均为字变量,在 X、Y、Z、V 字单元中存放是 16 位带符号数。 试编写汇编语言程序完成以下功能: ①计算表达式值(V–(X*Y+Z-720))/X; ②将上述表达式运算结果整数放在 SUM1 单元,余数放在 SUM2 单元。 2、求一个班 50 名学生成绩的平均值(附加题:最大值和最小值,并将结果显示 出来) 3、从键盘读入一个字符串,以 Enter 结束,字符串不超过 50 个字符,并打印 该字符串(附加题:查找中间是否有‘asm’子串。如果有,输出‘Yes’;否则, 输出‘No’)。
本次实验的内容均在 DEBUG 下完成,实现数据的装入、修改、显示;汇编 语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三. 实验过程和程序
1、启动 DOS 操作系统 2、运行 程序(若当前盘为 C)
C:>DEBUG↙ – ;(“–”为 DEBUG 提示符,仅当屏幕出现该提示符后,才可输入 DEBUG 命令) 4、用“A”命令编辑和汇编源程序 –A ↙ 186E:0100 MOV AX,[0200]↙ 186E:0103 MOV BX,[0202]↙ 186E:0107 ADD AX,[0204]↙ 186E:010B ADC BX,[0206]↙ 186E:010F MOV [0208],AX↙ 186E:0112 MOV [020A],BX↙ 186E:0116 ↙ 5、用“U”命令反汇编验证源程序 –U CS:0100↙ 186E:0100 A10002 MOV AX,[0200] 186E:0103 8B1E0202 MOV BX,[0202] 186E:0107 03060402 ADD AX,[0204] 186E:010B 131E0602 ADC BX,[0206] 186E:010F A30802 MOV [0208],AX 186E:0112 891E0A02 MOV [020A],BX 186E:0116 –
;------循环开始-------MOV CX, 8 GOGO: SHL AL,1 ;-------跳转------------JC EXIT add dx,3 LOOP GOGO ;************************ EXIT: MOV AH,9 LEA SI,JMPTABLE ADD SI,DX JMP SI JMPTABLE: 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 JMP NEAR PTR L8 L1: LEA DX,S1 JMP DONE L2: LEA DX,S2 JMP DONE L3: LEA DX,S3 JMP DONE L4: LEA DX,S4 JMP DONE L5:
;x*y+z
;x*y+z-720 ;v-(x*y+z-720) ;(v-(x*y+z-720))/x ;sum1 存商,sum2 存余数
mov bx,sum1 mov ch,4 mov cl,4 again: rol bx,cl mov dl,bl and dl,0fh cmp dl,0ah jl next add dl,37h ;"A"-"F" jmp down next: add dl,30h ;"0"-"9" down: mov ah,2 int 21h dec ch jnz again
mov si,0;找最小值 mov cx,50 mov al,grade[0] again1: cmp al,grade[si] jna next1 mov al,grade[si] next1: inc si loop again1 mov min,al
相关主题