汇编上机(实验二)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档