电信微机原理与汇编语言实验指导书.docx

上传人:b****5 文档编号:6660356 上传时间:2023-01-08 格式:DOCX 页数:19 大小:24.81KB
下载 相关 举报
电信微机原理与汇编语言实验指导书.docx_第1页
第1页 / 共19页
电信微机原理与汇编语言实验指导书.docx_第2页
第2页 / 共19页
电信微机原理与汇编语言实验指导书.docx_第3页
第3页 / 共19页
电信微机原理与汇编语言实验指导书.docx_第4页
第4页 / 共19页
电信微机原理与汇编语言实验指导书.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

电信微机原理与汇编语言实验指导书.docx

《电信微机原理与汇编语言实验指导书.docx》由会员分享,可在线阅读,更多相关《电信微机原理与汇编语言实验指导书.docx(19页珍藏版)》请在冰豆网上搜索。

电信微机原理与汇编语言实验指导书.docx

电信微机原理与汇编语言实验指导书

实验一显示程序

[实验目的]

1.掌握汇编语言程序上机的实验过程

2.掌握显示程序的基本设计方法。

[实验原理]

汇编语言上机过程

1、建立汇编源程序(建立文件名.asm)

(1)通过MD-DOS自带的EDIT.EXE文本编辑器进行输入和其它的文本编辑器进行录入、编辑,如可用c语言和pascal语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。

2、编译目标文件(即:

编译为.obj.lst.crf文件)

将正确的源代码编译为机器语言、程序清单及交叉引用表的目标文件。

如果此时程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,可根据提示去逐一修改。

3、连接为可执行文件(即:

连接为.exe或.com文件)

在DOS提示符下:

LINKfilename回车

4、运行编译好的可执行文件

当4通过后,会产生一个可执行文件,这时只需运行这个程序,看它是否按你所想象那样得出结果。

在试运行期间,要尽量试一些临界状态,看程序是否运行稳定、结果是否正确,进行5。

5、用调试工具调试,重新修改(逻辑错误)

用DOS中自带的调试程序DEBUG.EXE来进行程序调试、检查错误。

6.有关显示DOS基本命令

1)单个字符显示命令

将要显示的字符的ASCII码送给DL寄存器中断功能号2送AH寄存器,中断类型21H.

如显示“3”MOVDL,33H或MOVDL,‘3’如显示‘A’MOVAH,‘A’

MOVAH,2MOVAH,2MOVAH,2

INT21HINT21HINT21H

2)字符串显示命令

将要显示的字符串所在存储区的首地址送给DX寄存器中断功能号9送AH寄存器,中断类型21H.

如显示字符串“HELLO”存储区定义为TDB“HELLO”,10,13,24HLEADX,T

MOVAH,9

[实验方法及步骤]INT21H

1、编写实验程序。

2、编译。

3、运行(单步,跟踪),检查结果。

4、关主机。

[实验题目]

编写一个汇编语言程序,要求对键盘输入的一个小写字母用大写字母显示出来。

CODESEGMENT

ASSUMECS:

CODE

MAINPROCFAR

PUSHDSINT21HMOVDL,ALMAINENDP

MOVAX,0CMPAL,0DHMOVAH,2CODEENDS

PUSHAXJZEND0INT21HENDMAIN

CON:

MOVAH,1SUBAL,20HEND0:

RET

[预习内容]

1、熟悉汇编语言编辑、编译环境,熟悉DEBUG调试命令(见讲义附录)

2、熟悉有关显示DOS基本命令

[思考与练习]

1、显示一个字符串“ABC123”。

2、编一显示“HOWAREYOU!

”的程序。

【实验报告内容】

1、实验目的、仪器、原理和内容

2、要求写出算法和算法流程图。

3、程序必须在微机上编辑和汇编。

4、调试程序并进行分析并给出实验结果。

 

实验二数据排序

[实验目的]

1.掌握循环、分支程序的设计方法。

2.了解数据排序的简单算法。

[实验原理]

“冒泡排序”算法是从第一个数开始依次将相邻的两个数比较,如果前面的数比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。

再进行下一轮比较,找出第二大数据,直到全部数据有序。

[实验方法及步骤]

1、编写实验程序。

2、编译。

3、运行(单步,跟踪),检查结果。

4、关主机。

[实验题目]

把从MEM单元开始的10个16位有符号数按从大到小的顺序排列。

DATASEGMENT

MEMDW-1,0,24,-32,100,345,-39,1000,2345,-18

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

MOVAX,DATAADDSI,2DECBL

MOVDS,AXCMPAX,[SI]JNZNEXT1

LEADI,MEMJLNEXT3MOVAH,4CH

MOVBL,9XCHAX,[SI]INT21H

NEXT1:

MOVSI,DIMOV[SI-2],AXMAINENDP

MOVCL,BLNEXT3:

DECCLCODEENDS

NEXT2:

MOVAX,[SI]JNZNEXT2ENDMAIN

[预习内容]

1、熟悉冒泡排序原理。

2、熟悉程序结构(循环和分支)及程序设计方法

[思考与练习]

1、比较BX,CX,DX中带符号数的大小,将最大的数放在DX中。

2、两个字符串比较,若相同,把0存入RESULT单元,若不同,把-1存入RESULT单元。

3、从FIRST开始的10个单元中存放着一个字符串,结束符为‘$’。

编写一个程序,统计该字符串中字母‘a’的个数。

【实验报告内容】

1、实验目的、仪器、原理和内容

2、要求写出算法和算法流程图。

3、程序必须在微机上编辑和汇编。

4、调试程序并进行分析并给出实验结果。

 

实验三码制转换

[实验目的]

1掌握简单的数值转换算法及数值的各种表达方法。

2掌握码制转换的基本方法。

[实验原理]

1.BCD码的基本表示方法

压缩的BCD码和非压缩的BCD码两种格式。

压缩的BCD码用4位二进制数表示一个十进制数位,如9502d表示为:

1001010100000010,非压缩的BCD码以8位为一组表示一个十进制数位,8为中的低4位表示8421的BCD码,而高4位没有意义,如9502d则表示为:

uuuu1001uuuu0101uuuu0000uuuu0010

2.二进制到BCD码转换的基本方法

其中,用到除法指令

DIVOPD;AL<=AX÷OPD(字节)的商,AH<=余数。

DIVOPD;AL<=DXAX÷OPD(字)的商,AH<=余数。

3.BCD码转换到二进制的基本方法,是前者的逆变换。

用到乘法指令:

MULOPD;AX<=AL×OPD(字节)

MULOPD;DXAX<=AX×OPD(字)

4、ASCII码的基本表示方法

用7位二进制编码来表示128个字符和符号,本实验所用到的ASCII码表如下:

字符

0

1

2

3

4

5

6

7

8

ASCII码

30H

31H

32H

33H

34H

35H

36H

37H

38H

字符

9

A

B

C

D

E

F

ASCII码

39H

41H

42H

43H

44H

45H

46H

5、二进制到ASCII码转换的基本方法

查表法,比较法。

6、ASCII码到二进制转换的基本方法

≤9“与”0FH

>9减7后,“与”0FH

[实验方法及步骤]

1、编写实验程序。

2、编译。

3、运行(单步,跟踪),检查结果。

4、关主机。

[实验题目]

编写程序将AL和BL中的非压缩BCD码合并成一个压缩的BCD码,存在AL中。

CODESEGMENT

ASSUMECS:

CODE

MAINPROCFARSHLAL,CLMAINENDP

MOVAL,04HORAL,BLCODEENDS

MOVBL,05HMOVAH,4CHENDMAIN

MOVCL,4INT21H

[预习内容]

熟悉微机原理中第一章有关数制及相互转换的基础知识

[思考与练习]

1、编写一个程序,将变量ABC中的16位无符号数,用"除十取余"的方法转换成十进制数,要求结果用压缩BCD码保存在RESULT单元中。

2、若在内存的输入缓冲区ASCBUF中,已有若干个用ASCII码表示的十进制数码.要求把它们转换为相应的BCD码,且把两个相邻存储单元的十进制数码的BCD码合并在一个存储单元中,且地址高的放在前四位,存放在BCDBUF区域.。

3、将AX拆为二个ASCII码,并存入Result开始的二个单元。

【实验报告内容】

1、实验目的、仪器、原理和内容

2、要求写出算法和算法流程图。

3、程序必须在微机上编辑和汇编。

4、调试程序并进行分析并给出实验结果。

 

实验四实时显示日期和时间(综合)

一、实验目的

1、掌握子程序设计基本方法,包括子程序定义、调用、返回、参数传递。

2、学习如何进行数据转换和DOS功能调用(系统时间提取、预置等)

3、学习和掌握如何通过查表法提取所需数据。

二、实验环境

1、硬件:

微机

2、软件:

EDIT、MASM和LINK

三、实验原理

系统功能调用是DOS为系统程序员及用户提供的一组常用子程序。

DOS规定用中断指令INT21H进入各功能调用子程序的总入口,再为每个功能调用规定一个功能号以便进入相应各个子程序的入口。

子程序的入口参数及出口参数在每个功能调用的说明中可以查到。

DOS系统功能调用的使用方法如下:

(1)在AH寄存器中存入所要调用功能的功能号;

(2)根据所调用功能的规定设置入口参数;

(3)用INT21H指令转入子程序入口;

(4)相应的子程序运行完后,可以按规定取得出口参数。

DOS共提供了80个功能调用。

大致分为设备管理、文件管理和目录管理等几类。

在DOS功能中,通过对中断INT21H功能号(2AH-2DH)调用可实现系统时间提取、预置,在屏幕上实时显示日期和时间。

功能号2AH:

取日期返回参数DH:

DL=月:

日(二进制)

功能号2BH:

设置日期调用参数CX:

DH:

DL=年:

月:

日返回参数AL=0成功否则失败

功能号2CH:

取时间返回参数CH:

CL=时:

DH:

DL=秒:

1/100秒

功能号2DH:

设置时间调用参数CH:

CL=时:

分返回参数AL=0成功否则失败

DH:

DL=秒:

1/100秒

四、实验题目

利用DOS功能,实现系统时间提取、预置,要求在屏幕上实时显示日期和时间,按任意键停止。

五、思考题

1、编写16进制转换成10进制的程序。

2、编写10进制转换成16进制的程序。

六、预习要求

1、熟悉和掌握实验目的。

2、复习相关知识,初步完成实验内容的源程序和操作步骤。

七、实验报告要求

1、要求写出算法和算法流程图。

2、记录实验中的源程序。

3、记录实验中的执行结果。

4、对照预习时的源程序是否与实验记录相同,分析原因。

DATASEGMENT

BUFDB4DUP(?

),24H

mes1db'请输入年如2007:

'

mes2db'请输入月和日如0523:

'

mes3db'请输入小时和分钟如1125:

'

mes4db'请输入秒如30:

'

crlfdb10,13,24h

DATAENDS

codesegment

assumecs:

code,ds:

code

mainprocfar

movax,data

movds,ax

calldispxt;显示系统日期和时间

leadx,mes1

movah,9

int21h

calldecibin;设置系统日期2007:

5:

8

movcx,bx

leadx,mes2

movah,9

int21h

calldecibin

movdx,bx

movah,2bh

int21h

movch,11h;设置系统时间17:

16:

30

movcl,10h

movdh,1eh

movah,2dh

int21h

calldispxt;显示系统日期和时间

quit:

movah,4ch

int21h

ret

mainendp

;----------------------------

dispxtproc

movah,2ah;取系统日期

int21h

pushdx;显示年

movax,cx

callh16bcd

movdl,':

'

movah,2

int21h

popdx;显示月和日

moval,dh

callhexbcd

pushdx

movdl,':

'

movah,2

int21h

popdx

moval,dl

callhexbcd

movdl,10

movah,2

int21h

movdl,13

int21h

 

movah,2ch;取系统时间

int21h

moval,ch;显示时

callhexbcd

pushdx

movdl,':

'

movah,2

int21h

popdx

moval,cl;显示分

callhexbcd

pushdx

movdl,':

'

movah,2

int21h

popdx

moval,dh;显示秒

callhexbcd

movdl,10

movah,2

int21h

movdl,13

int21h

ret

dispxtendp

;-----------------------------

hexbcdproc

pushcx

pushdx

movbl,10

movah,0

divbl

movcl,ah

addal,30h

movdl,al

movah,2

int21h

addcl,30h

movdl,cl

int21h

popdx

popcx

ret

hexbcdendp

;----------------------------

h16bcdproc

pushdx

pushcx

MOVSI,OFFSETBUF

MOVCX,4

MOVBX,1000

LP:

CALLSUB1

ADDAL,30H

MOV[SI],AL

INCSI

MOVDI,DX

MOVAX,BX

MOVBX,10

CALLSUB1

MOVBX,AX

MOVAX,DI

DECCX

JNZLP

leadx,buf

movah,9

int21h

popcx

popdx

RET

h16bcdENDP

;----------------------

SUB1PROCNEAR

MOVDX,0

DIVBX

RET

SUB1ENDP

;-------------

decibinprocnear

movbx,0

newchar:

movah,1

int21h

subal,30h

jlexit

cmpal,9d

jgexit

cbw

xchgax,bx

movcx,10d

mulcx

xchgax,bx

addbx,ax

jmpnewchar

exit:

ret

decibinendp

;-----------------------------

codeends

endmain

附录1DEBUG主要命令

DEBUG是为汇编语言设计的一种高级工具,它通过单步、设置断点等方式为汇编语言程序员提供非常有效的调试手段。

DEBUG程序的调用

在DOS的提示符下,键入命令:

c:

\debug[d:

][path][filename[.ext][parm1][parm2]

其中,文件名是被调试文件的名字。

如用户键入文件,则DEBUG将指定的文件装入存储器中,用户便可对其进行调试。

如果未键入文件名,则用户可用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。

命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。

注意:

文件的扩展名不能省略。

在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。

1.显示存储单元的命令D

显示存储单元的命令的格式为:

-D[address]或_D[rang]

例如,按指定范围显示存储单元内容的方法为:

-d100120

18E4:

0100c70604023801c706-06020002c7060802G…8.G…..G…

18E4:

01100202bb0402e80200-CD20505156578B37..;..h..MPQVW.7

18E4:

0120bB

其中,0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边的ASCII字符表示每个字节,·表示不可显示的字符。

这里没有指定段地址,D命令自动显示DS段的内容。

如果只指定首地址,则显示从首地址开始的80个字节的内容。

如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。

2.修改存储单元内容的命令E

修改存储单元内容的命令有2种。

第一种格式可用给定的内容替代指定范围的存储单元内容。

命令格式为:

-Eaddress[list]

例如,-EDS:

100F3’XYZ’8D。

其中F3,’X’,’Y’,’Z’和8D各占一个字节。

该命令可用这5个字节来替代存储单元DS:

0100到0104的原先的内容。

第二种格式采用逐个单元相继修改的方法。

命令格式为:

-Eaddress

例如,-EDS:

100。

则可能显示为:

18E4:

010089.-

如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键,完成修改,并显示下一个单元的内容:

18E4:

010089.781B.-

这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。

3.填写命令F(FILL)

其格式为:

-Frangelist

例如:

-F4BA:

01005F3’XYZ’8D。

使04BA:

0100-0104单元包含指定的5个字节的内容。

如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。

4.检查和修改寄存器内容的命令R(register)

三种格式:

1)显示CPU内所有寄存器内容和标志位状态,格式为:

-R

例如,-r。

AX=0000BX=0000CX=010ADX=0000SP=FFFEBP=0000SI=0000DI=0000

DS=18E4ES=18E4SS=18E4CS=18E4IP=0100NVUPDIPLNZNAPONC

18E4:

0100c70604023801MOVWORDPTR[0204],0138DS:

0204=0000

2)显示和修改某个寄存器内容,格式为:

-Rregistername

例如,键入

-RAX

系统将响应如下:

AXF1F4

即AX寄存器的当前内容为F1F4,若不修改则按ENTER键;否则,可键入欲修改的内容,如:

-Rbx

BX0369:

059F

则把BX寄存器的内容修改为059F。

3)显示和修改标志位状态,命令格式为:

-RF

系统将响应,显示信息的含义如下表所示,如:

OYDNEINGZRACPECY

标志位符号表

标志位名称

置位

复位

溢出Overflow

OV

NV

方向Direction

DN

UP

中断Interrupt

EI

DI

符号Sign

NG

PL

零Zero

ZR

NZ

辅助进位AnxigiaryCarry

AC

NA

奇偶Parity

PE

PO

进位Carry

CY

NC

此时,如果不修改其内容可按ENTER键,否则,键入欲修改的内容,如:

OVDNEINGZRACPECY-PONZDINV

即可。

可见,键入的顺序可以是任意的。

5.运行命令G

为了检查程序运行是否正确,希望在运行中能设置断点以便逐段调试程序。

运行命令的格式为:

-G[=address1][address2[address3…]]

其中地址1指定运行的起始地址,如果不指定则从当前的CS:

IP开始运行。

后面的地址均为断点地址,当指令执行到断点时,停止执行并且显示当前所有寄存器即标志位的内容和下一条将要执行的指令。

6.跟踪命令T

跟踪命令有两种格式:

(1)逐条指令跟踪

-T[=address]

从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。

如果未指定地址则从当前的CS:

IP开始执行。

(2)多条指令跟踪

-T[=address][value]

从指定地址起执行n条指令后停下来,n由value指定。

7.汇编命令A

汇编命令的格式为:

-A[address]

该命令允许键入汇编语言语句,并且能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。

必须注意:

DEBUG把键入的数字均看成十六进制数,若要键入十进制数,则其后应加以说明,如100D。

8.反汇编命令U

(1)从指定地址开始,反汇编32个字节,其格式为:

-u[address]

例如:

-u100

18E4:

0100c70604023801movwordptr[0204],0138

18E4:

0106c70606020002movwordptr[0206],0200

18E4:

010cc70606020202movwordptr[0208],0202

18E4:

0112BB0402movbx,0204

18E4:

0115E80200call011A

18E4:

0118CD20int20

18E4:

011A50pushax

18E4:

011B51pushcx

18E4:

011C56pushsi

18E4:

011D57pushdi

18E4:

011E8B37movsi,[Bx]

如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。

(2)对指定范围内的存储单元进行反汇编,其格式为:

-U[range]

例如:

-u10010c

18E4:

0100c70604023801movwordptr[0204],0138

18E4:

0106c70606020002movwordptr[0206],0200

18E4:

010cc70606020202movwordptr[0208],010

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1