汇编上机(实验二)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
昆明理工大学信息工程与自动化学院学生实验报告
(201 —201 学年第一学期)
一、实验目的:
1、熟悉并且掌握汇编语言的基本指令;
2、熟练地掌握循环与分支程序的设计过程;
3、掌握带符号数的比较转移指令:JL、JLE、JG、JGE;
4、伪指令EQU 及操作符'$'的使用。
5、熟悉并且掌握BIOS 和DOS中断的调用方法。
二、实验要求:
A、设计要求
1、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z 字符,均显示“c”;若是回车字符,则结束程序,若为其它字符则不显示,继续等待新的字符输入。
2、提示编程:①回车字符的ASCII码为0DH
②显示字符用INT 21H的2号调用
B、设计要求
已知DATA单元开始存放三个带符号数
1、判断三个数是否同号,若同时为正,显示“+”,若同时为负,则显示“—”,否则显不“*”。
2、显示三个数中的最小值。
c、设计要求
编写7c号中断的处理程序,使得在除法溢出发生时,在屏幕上输出字符串”201110405313 Li Longzhi”,然后返回DOS。
d、设计要求
编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后存入内存缓冲区BUFFER。加密表为:
输入数字:0、1、2、3、4、5、6、7、8、9
密码数字:7,5,9,1,3,6,8,0,2,4
提示:加密可通过XLAT指令完成。
要求:键盘输入通过BIOS和DOS中断分别实现。
三、实验环境
汇编程序:MASM 6.15,链接程序:LINK.EXE,调试环境:DEBUG.EXE,对操作系统和计算机五特殊要求,如果是WIN7以上操作系统,需要安装DOSBOX虚拟平台。
四、实验内容(算法及运行结果的截图)
先模拟c盘和设置好默认路径,后面程序则可以在该路径下直接编译、链接和运行。后面文件分别为a.asm、b.asm 、c.asm和test.asm、d.asm。
a.程序代码:
data segment ;定义数据段
DB 0
data ends
code segment
assume cs:code,ds:data
main proc far ;定义main函数
push ds ;对ds寄存器进栈保护
sub ax,ax ;对ax清零
push ax ;对ax寄存器进栈保护
mov ax,data
mov ds,ax ;将data段地址赋值给ds
next:
mov ah,07h ;调用int 21键盘输入(无回显)功能
int 21h
cmp al,0dh ;回车ascall码为0dh
jE end_d
cmp al,'0' ;对数字处理
JGE DY0 ;>=0
JMP NEXT ;<'0'...30H
DY0: ;数字处理函数
CMP AL,'9' ;因为int21 07号功能字符信息存于AL中。JLE IS_09
CMP AL, 'A'
JGE DY_A ;DAYU A
JMP NEXT ;<'A'...41H
DY_A:
CMP AL,'Z'
JLE IS_AZ
CMP AL,'a'
JGE DY_xA ;DAYU xA
JMP NEXT ;<'a'...61H
DY_xA:
CMP AL,'z'
JLE IS_AZ
JMP NEXT
IS_AZ:
MOV AH,02
MOV DL,'c'
INT 21H
JMP NEXT
IS_09:
MOV AH,2
MOV DL,AL
INT 21H
JMP NEXT
end_d:
ret ; 用于调用返回main endp
code ends
end main
程序运行截图:
b.程序代码:
data_C segment
DA TA DB 5,6,7 ;编程所用3个数,该处3数值可任意设定A1 DB 0
A2 DB 0
A3 DB 0
DISP_MESS DB 0DH,0AH,'MIN IS : ' ;输出字符串
D1 DB 0
D2 DB 0, 'H$'
data_C ends
code segment
assume cs:code,ds:data_C
main proc far
push ds ;寄存器进栈保护
sub ax,ax ;ax寄存器清零
push ax ;寄存器进栈保护
mov ax,data_C
mov ds,ax ;将数据段地址赋值给ds
MOV BX, OFFSET DA TA ;将数据段首地址赋值给bx
MOV AL,[BX]
INC BX
MOV AH,[BX]
CMP AL,AH ;将bx值取出并进行判断是否已取完
JL ALAL1 ;AL XCHG AH,AL ALAL1: INC BX MOV DL,[BX] CMP AL ,DL JL ALAL XCHG AL,DL ALAL: CMP AH,DL JL AL_SMALL XCHG AH,DL AL_SMALL: MOV A1,DL MOV A2,AH MOV A3, AL XOR DL,AL ;最大和最小数异或 AND DL,80H NOT DL TEST DL,80H ;高位为1 表示一正一负,否则为全负或全正JE YZYF AND AL,80H NOT AL TEST AL,80H ;高位为1 表示全负 JE QF MOV AH,02 MOV DL,'+' INT 21H JMP DISP_SMALL QF: MOV AH,02 MOV DL,'-' INT 21H JMP DISP_SMALL YZYF: MOV AH,02 MOV DL,'*' INT 21H DISP_SMALL: MOV AL,A3 MOV AH,AL AND AX,0F00FH MOV CL,4