首页 >> 实验教学 >> 实验项目 >> 详细内容
实验教学
 
实验项目 >> 正文
汇编语言实验指导书
日期:2021-12-09 17:36:48  发布人:nclgjsj  浏览量:117

实验一 汇编语言上机环境

实验目的

熟悉汇编语言上机环境

掌握汇编语言上机过程与步骤

实验器材与实验准备

实验器材:

    硬件:微机一台

    软件:DOSWIN98/2000/XP

          MASM . EXELINK . EXE

    实验准备:

cs1  segment

    assume  cs : cs1 , ds : cs1

start: push  cs

    pop  ds

    mov  ah,0  

    int  10h

    lea  dx , str0

    mov  ah,9

    int  21h

    mov  ah,4ch

    int  21h

str0  db   'hello' , '$'

cs1  ends

    end  start

实验内容和要求

建立汇编源程序文件

逐步汇编,连接生成可执行文件

运行生成的可执行文件

实验步骤:

在记事本中编辑原文件

MASM . EXELINK . EXE以及原文件拷贝在同一目录下

汇编原文件

连接目标文件

执行可执行文件

实验结果分析

    在生成可执行文件过程中,一共生成了多少个相关的文件,它们的作用分别是什么?


实验二 DEBUG 的使用

(一)实验目的

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

序。

2、掌握 8086/8088 的寻方式及多字节数据的处理方法。

(二)实验设备

硬件环境:IBM-PC 兼容机 

软件环境:操作系统 DOS3.0 版本

  调试程序 DEBUG .COM

(三)实验内容和要求  

实验内容:        

1利用 DEBUG 程序中E命令将两个多字节003F1AE7H”和

006BE5C4H”分别送入起始地址为 DS:0200H  DS:0204H 个单元中。

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

实验要求:

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

(四)预习要求

1、复习 DOS 启动方式和 DOS 有关命令的使用;

2阅读本后的附录熟悉掌握 DEBUG 调试程序中的 ADEGQ

RTU 命令的书写格式及功能;

3、复习寻方式和相关的数据传送指令及算术运算指令。

(五)实验步骤

1、启动 DOS 操作系统

2、运行 DEBUG.COM 程序(若当前盘为 C

CDEBUG

;(   DEBUG 提示符,仅当屏幕出现该提示符后才可输入 DEBUG命令

 

3、用A”命令编辑和汇编源程序

 

A  

186E0100 MOV AX[0200]

186E0103 MOV BX[0202]

186E0107 ADD AX[0204]

186E010B ADC BX[0206]

186E010F MOV [0208]AX

186E0112 MOV [020A]BX

186E0116

 

4、用U”命令反汇编验证源程序

–U CS:0100

186E0100 A10002         MOV AX[0200]

186E0103 8B1E0202        MOV BX[0202]

186E0107   03060402        ADD AX[0204]

186E010B   131E0602 ADC BX[0206]

186E010F A30802 MOV [0208]AX

186E0112 891E0A02 MOV [020A]BX

186E0116

检查源程序是否有错误若有则返回到第 3 A  地址命令进 行修改,直到程序无错误。

DEBUG  约定在其命令或源程序中所涉及到的数据均被看作十六进 制数,其后不用H”说明。

 DEBUG 源程序中不能使“标号”、“变量和一些伪指令。

 DEBUG 下,大小写不敏感。

 

5、程序未行前,用R”命令观察,相关寄存器的内容。

R

AX= 0 BX= 0 SI= 0

DI= 0 CS= 1680 IP= 0

6在程序未执行前,用D命令 DS:0200HDS:0204HDS:0208H

单元的内容

D 200 20B  

7、用G”命令运行源程序

G =110 0116  

8、再用D”命令观察 DS:0200HDS:020BH 字节单元中的内容

D 200 20B

9、用T单步操作命令对源程序单步执行观察 AXBXCSIP 寄存 器内容的变化,并与预计的结果相比较。

z D 命令显示内存数据,注意观察多字节数据在内存中的存放方式。

z 指令执行的时候,IP 寄存器随着变化,注意观察。

(六)实验结果分析

1、程序运结果AX= 00abhBX= 00abh

DS:0208H 四字单元的内容: 00ab00abh

 

实验三 分支程序设计

(一)实验目的

1握多路分支 IF…Else IF…Else 程序构和设计方法。

2、学会使地址表和转移表法写多路分支程序。

(二)实验设备

实验器材:

    硬件:微机一台

    软件:DOSWIN98/2000/XP

          MASM . EXELINK . EXE

(三)实验内容和要求

实验内容:

在内存 Score 缓冲区中存放有20 学生的成绩数据,为无符号字节数。假 设学生成[90100]区间为优,在[80,90)区间为良,在[70,80区间为一 [60,70区间为及格[0,60区间为不及格要求统计出不及格及格, 一般,良好和优秀的人数,分别送  NotpassedPassedGoodBetter    Best 字节单元。

用普通跳转语句实现上述功能。

(四)预习要求

1、复习 DOS 启动方式和 DOS 有关命令的使用;

2阅读本后的附录熟悉掌握 DEBUG 调试程序中的 ADEGQ

RTU 命令的书写格式及功能;

(五)实验步骤

1.编写源程序

data segment

Score db 56,23,94,64,85,61,94,81,76,61,34,94,68,95,84,34,16,49,79,84

len equ $-Score

Notpassed db 0

Passed db 0

Good db 0

Better  db 0  

Best db 0

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov cx,len

mov si,0

re: mov al,score[si]

cmp al,60

jae f1

inc notpassed

jmp next

f1: cmp al,70

jae f2

inc passed

jmp next

f2: cmp al,80

jae f3

inc good

jmp next

f3: cmp al,90

jae f4

inc better

jmp next

f4: inc best

en: inc si

loop re

mov ah,4ch

int 21h

code ends

end start

2.汇编源程序

3.连接目标程序

4.调试可执行程序,分析程序的运行结果

(六)实验结果分析

1、确认不格,及格,一般,良好和优秀的人数总和是否为 20

(七)编程提示

a) 用普通的跳转语句实现上述功能时区分不及格及格一般良好和 优秀 5 间,是一个 5 分支的结,至少需要 4 条跳转指

b) 注意无符号数和有符号数使用跳转指令的区别。

c) 用地址表和转移表法实现时必须找出分数与地址表和转移表的偏移的 对应关系。

 

实验四 循环程序设计

(一)实验目的

1握多重循环程序的结构和设计方法。

2、弄清直排序的算法。

3、弄清冒排序方法。

(二)实验设备

实验器材:

    硬件:微机一台

    软件:DOSWIN98/2000/XP

          MASM . EXELINK . EXE

(三)实验内容和要求

实验内容:

在内存 Score 缓冲区中放有 20 学生的成绩数据,为无符号字节数。 设计程序完成如下功能:

将最高和最低的分数分别存放在 MIN  MAX 单元中。

(四)预习要求

1、复习 DOS 启动方式和 DOS 有关命令的使用;

2阅读本后的附录熟悉掌握 DEBUG 调试程序中的 ADEGQ

RTU 命令的书写格式及功能;

(五)实验步骤

1.编写源程序

Data segment

Da   dw 4546h,9414h,6445h,8745h,6136h,1264h,5555h

Num  dw  ($-da)/2            ;填空  (当前地址-da)/2

Max  dw ?

Min  dw ?

Data ends

Code segment

     Assume cs:code ,ds:data

Start:mov ax,data

mov ds,ax

mov cx,num

    mov ax,da

mov dx,da

mov si,0

re: cmp da[si],ax

jle skip1   ;如果小于等于就跳过

mov ax,da[si]

skip1: cmp da[si],dx

jge skip2   ;>=跳过

mov dx,da[si]

skip2: add si,2

   loop re

        mov max,ax

MOV MIN,DX

MOV AH,4CH

INT 21H

CODE ENDS

END START

2.汇编源程序

3.连接目标程序

4.调试可执行程序,分析程序的运行结果

 

(六)实验结果分析

1、循环次数NUM的定义有何特点

以符号定义,不占用内存空间

2、DEBUG调试分析是否得到正确结果

(七)编程提示

(a)  无符号数的比较是用ja,jc,je

 

实验五 子程序设计

(一)实验目的

1握子程序的设计方法和调用方式

2、深刻认堆栈在子程序设计中所起的作用

3、掌握子序调试的技巧。

(二)实验设备

实验器材:

    硬件:微机一台

    软件:DOSWIN98/2000/XP

          MASM . EXELINK . EXE

(三)实验内容和要求

实验内容:

将数值1234和56H,用十进制将它们显示,要求用子程序的方式来实现显示功能.

(四)预习要求

1、复习 DOS 启动方式和 DOS 有关命令的使用;

2阅读本后的附录熟悉掌握 DEBUG 调试程序中的 ADEGQ

RTU 命令的书写格式及功能;

(五)实验步骤

1.编写源程序

;要求编写一个子程序,这个子程序能自动将 AX的数值以十进制的形式输出

CODE SEGMENT

ASSUME CS:CODE

START:

MOV AX,1234

CALL PRI

 

mov dl,10;换行

mov ah,2

int 21h

 

mov dl,13;回车

mov ah,2

int 21h

 

MOV AX,56H

CALL PRI

mov ah,4ch

int 21h

 

pri proc near

push bx

push cx

push dx

mov bx,10;十进制

mov dx,0;被除数的高16位

mov cx,0;位数

rediv:  div bx ;dxax  /  bx

push dx;余数

mov dx,0

inc cx

cmp ax,0

jnz rediv

 

mov ah,2

reout: pop dx

add dl,30h;将数值位-〉字符   1-'1'

int 21h

loop reout

pop dx

pop cx

pop bx

ret

pri endp

 

code ends

end start

 

2.汇编源程序

3.连接目标程序

4.调试可执行程序,分析程序的运行结果

(六)实验结果分析

1、理解 寄存器参数传递方式各有什么特点

使用简单方便

数量少,难以传递多个数据

(七)编程提示

(a)  二进制显示也可采用移位并判断该位的方式进行。

(b)  十进制数用除以 10 商的方式。

(d)  注意去掉高位的0


实验六 中断程序设计

(一)实验目的

1断服务子程序的编写。

2BIOS  DOS 中断用。

(二)实验设备

硬件环境:IBM-PC 兼容机 软件环境:操作系统 DOS3.0 以上

编辑程序 EDIT 或其它编辑程序 汇编程序 MASM.EXE 6.1X 连接程序 LINK.EXE

调试程序 DEBUG.COM

(三)实验内容和要求

实验内容:

1.编写一个完成的程序,用于输入一个小写字母,输出大写字母。

要求:

分别用BIOS  DOS 中断用来实现

实验准备

1、复习 DOS 启动方式和 DOS 有关命令的使用;

2阅读本后的附录熟悉掌握 DEBUG 调试程序中的 ADEGQ

RTU 命令的书写格式及功能;

3、分析BIOS  DOS 中断用的功能和区别

(五)实验步骤

  1.编写源程序

;DOS功能调用输入字符,如果是小写,就改成大写

code segment

assume cs:code

start:  

MOV si,5

re:

mov ah,1

int 21h

push ax

 

mov dl,13;回车

mov ah,2

int 21h

mov dl,10;

mov ah,2

int 21h

 

pop ax

cmp al,'a'

jb skip

cmp al,'z'

JA SKIP

SUB AL,32

SKIP:

MOV AH,2

MOV DL,AL

INT 21H

 

mov dl,13;回车

mov ah,2

int 21h

mov dl,10;回车

mov ah,2

int 21h

 

sub si,1

jnz re

MOV AH,4CH

INT 21H

CODE ENDS

END START

;BIOS功能调用输入字符,如果是小写,就改成大写

code segment

assume cs:code

start:  

MOV si,5

re:

mov ah,0

int 16H

push ax

 

mov Al,13;回车

mov ah,E

int 10h

mov Al,10;

int 10h

 

pop ax

cmp al,'a'

jb skip

cmp al,'z'

JA SKIP

SUB AL,32

SKIP:

MOV AH,0

INT 10H

 

mov Al,13;回车

mov ah,E

int 10h

mov Al,10;

int 10h

 

sub si,1

jnz re

MOV AH,4CH

INT 21H

CODE ENDS

END START

 

2.汇编源程序

3.连接目标程序

4.调试可执行程序,分析程序的运行结果

 

(六)实验结果分析

利用实验中源程序中的输出方法,分析BIOS  DOS 中断用的功能和区别。

BIOS功能调用功能更为强大,但参数设置复杂

DOS功能调用实现相对简单,但功能不如BIOS强

DOS功能调用格式相对固定,根据AH值不同,使得在执行INT 21H指令时有不同功能

BIOS调用对不同的设备,int后所接参数都不一样,而且AH的值也决定其操作

核发:nclgjsj 点击数:117收藏本页