东华大学微机原理实验指导书2015(6)

2019-04-09 23:11

4)运行命令G,其格式为

—G[=address1][address2[address3?]。

其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。反面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。

5)跟踪命令T(Trace),有两种格式; .逐条指令跟踪 —T[=address]

从指定地址执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。

.多条指令跟踪

-T[=address][value]

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

6)汇编命令A(Assemble),其格式为: —A[address]

该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DUBUG把键入的数字均看成十六进制数,所以如要键入十六进制数,则起后应加以说明,如100D。

7)反汇编命令U(Unassemble),有两种格式。 .从指定地址开始,反汇编32个字节,其格式为: —U[address] 例如:

-u100

18E4:0100 C70604023801 MOV WORD PTR [0204],0138 18E4:0106 C70606020002 MOV WORD PTR [0206],0200 18E4:010C C70608020202 MOV WORD PTR [0208],0202 .对指定范围内的存储单位经行反汇编,格式为: —U[range]

例如:

-u100 10c

18E4:0100 C70604023801 MOV WORD PTR [0204],0138 18E4:0106 C70606020002 MOV WORD PTR [0206],0200 18E4:010C C70608020202 MOV WORD PTR [0208],0202 8)命名命令N(Name),其格式为: —N filespece[filespeces]

命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,以便在其后用L或W命令把文件装入或存盘。Filespecs的格式可以是:

[d: ][path] filename[.ext] 例如,

—N myprog

26

—L —

可把文件myrong装入存储器。

9)装入命令L(Load),有两种功能。

。把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。其格式为: L [address[drive sector sector] .装入指定文件,其格式为: —L[address]

此命令装入已在CS:5CH中格式化了控制块所指定的文件中。如未指定地址,则装入CS:0100开始的存储区中。

10)写命令W(Write),有两种功能。 .把数据写入磁盘的指定扇区。其格式为: —W address drive sector sector .把数据写入指定的文件中。其格式为: —W [address]

此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。

11)退出DEBUG命令Q(Quit),其格式为: —Q

它退出DEBUG,返回DOS.本命令并无存盘功能,如需存盘应先使用W命令。

附录二 键盘和显示的DOS功能调用

表9.5 DOS键盘操作(INT21H)

AH 功能 调用参数 返回参数 1从键盘输入一个字符并回显在屏幕上 AH=字符 6读键盘字符 DL=0FFH AL=字符 (如果准备好) AL=0 (未准备好) 7从键盘输入一个字符,不回显 AL=字符 8从键盘输入一个字符,不回显

检测CtrLBreak AL=字符 A输入字符到缓冲区 DS:DX=缓冲区首址

B 读键盘状态 AL=0FFH有键入 AL=00无键入

C 清除键盘缓冲区,并调用一种键盘功能 AL= 键盘功能号(1,6,8,7或A) 9.1.3.1单字符输入

DOS21H中断的功能1,7,和8都能从键盘读一字符送入AL寄存器。功能1能把字符显示出来并检验是否按下了CtrlBreak键,就自动调用中断23H并结束程序。21H 的功能7不能回打字符

27

或检验CtrlBreak。21H的功能8检验Ctrlbreak,但是不回显 。

在交互程序中常常需要用户对一个提示做出应答,或通过输入一个字母或数字对菜单的各项进行选择,这时就要用到21H的单字符输入功能。例如程序显示出一蹿信息,要求你回答Y或N,回答Y,程序将转入标号为Yes的程序段,而N使程序转入标号为NO的程序段,按下其他键程序就等待。这样的工作由下面的程序段来完成

GET-KEY: MOV AH,1 Read a key with echo INT 21H

CMP AL,Y Is it Y?

JE YES If so,jump to Yes CMP AL,N Is it N ?

JE NO If so,jump to NO

JNE GET-KEY otherwise,wait for Y or N

测试Y,N或其他字母,数字和符号可直接把他们写在CMP指令中,用引号括起来。但是如果想检测Enter(Return)键,就要在指令中写出它的ASC11码0D(16进制)或13(十进制)。例如,要求程序在按下Return键后才继续运行,用下面的指令:

WAIT HERE; MOV AH 7 WAIT FOR ENTER INT 21 H

CMP AL , 0DH JNE WAIT—HERE

这里用AH=7代替AH=1,差别只是不把按下的键显示出来,或不执行键的特定功能。

如果要求程序能接受功能或数字组合键必须进行两次DOS调用,第一次回送00,第二次回送扫描码。例如,程序显示出一个菜单,要求用户通过键入F1,F2或F3来选择1,2或3 项,按其它键则产生错误信息序的应答检测部分如下:

MOV AH,7 ;Wait for key INT 21H

CMP AL,0 ;Is it a function key? JE GET_EC ;yes, read the scan code JMP ERROR ;No, display error message

GET_EC: MOV AH,7

INT 21H

CMP AL,3BH ;F1? JE OPTION1

CMP AL,3CH ;F2? JE OPTION2

CMP AL,3DH ;F3? JE OPTION3

JMP ERROR ;Invalid key ,display ;error message

9.1.3.2 输入字符串

在许多应用程序中,要求用户输入姓名、地址或其它字符串,21H中断的功能A能从键盘读入一串字符并把它存入用户定义的缓冲区中。缓冲区的第一个字节保存最大字符数,这个最大字符数

28

由用户程序给出。如果键入的字符数比此数大,那就会发出“嘟嘟”声,而且光标不再向右移动。

第二个字节是实际输入字符的个数,这个数据是由功能A填入的,而不是由用户填入。在这两个字节之后,字符串就按字节存入缓冲区,最后结束字符串的回车符0DH还要占用一个字节,因此整个缓冲区的字节空间应为最大字符数(包括Return在内)加2。

MAXLEN DB 32 ACTLEN DB ?

STRING DB 32 DUP(?) 输入字符串的指令如下:

LEA DX,MAXLEN ;Make DX point to buffer MOV AH,0AH ;Input the string INT 21H 如果我们键入字符串:

By brooks too broad for leaping↙

此时缓冲区MAXLEN的各存储单元图示如图9.4。 20 lB y b r o o k s t o f o b r o a d f o r l e a p i n g 0d ﹕ ﹕ ﹕ ﹕ ﹕ ﹕

﹕ ﹕ 字符串开始 ﹕ ﹕

﹕ 实际键入的字符数 ﹕

最大字符数

图9.4 字符缓冲区

INT 21的功能A把实际字符数(不包括Return)填入缓冲区的第二个字节,并保持DS:DX指向缓冲区的第一个字节。如果想把实际字符数放入CX寄存器,并把指针(DS:DX)指向字符串的第一个字符,图9.5的程序可完成这个工作。

;Read a string from the keyboard ; this procedure read up to 50 keys

;﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡ dseg segment

user_string db 50,0,50 dup(?) dseg ends

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - cseg segment

assume cs:cseg,ds:dseg read_keys pro far push ds sub ax,ax push ax

29

mov ax,dseg mov ds,ax

lea dx,user_string mov ax,0ah int 21h sub ch,ch

mov cl,user_string+1 add dx,2 ret read_keys endp

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cseg ends

;﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡ end

图9.5 输入字符串程序

9.1.3.3 清除键盘缓冲区

从键盘输入的字符实际上先放在一个16字节的键盘缓冲区内,功能1,7,8和0AH实际上是从键盘缓冲区取得字符。

INT 21H的功能0CH能清除键盘缓冲区,然后执行在AL中指定的功能,AL指定的功能可以是1,6,7,8或0AH,使用0CH可以使程序在输入一个字符之前,将以前键入的字符清除掉。

功能0CH的用法如下: MOV AH,0CH MOV AL,08H INT 21H

这几条指令实际提供的输入功能是8,它不回打,但要检测Ctrl_Break。如果不想用Ctr_ INT 10H ;video ROM call

MOV AH,8 ;read char and attr MOV BH,0 ;page 0

INT 10H ;video ROM call 9.2.3 DOS显示功能调用

表9.7为INT 21H的显示操作,其中有两个是显示单字符的功能,另一个是显示字符串 功能,这些功能都自动向前移动光标。

表9.7 INT 21H显示操作

30

AH 功能 调用参数 2 显示一个字符 (检验Ctrl_Break) 6 显示一个字符 (不检验Ctrl_Break) DL=字符 光标跟随字符移动 DL=字符 光标跟随字符移动 9 显示一个字符 DS:DL=串地址 串必须以$结束,光标跟随字符移动

AH=9的功能是显示字符串,它要求被显示输出的字符必须以$字符(24h)作为定界符,此功能是用$作为标记来计算串的长度的。有些ASXII码,如控制码,不能出现在该字符串中。显示字符串时,如果希望光标能自动换行,那么可在字符串结束之前加上回车和换行的ASCII码。

MESSAGE DB ‘The sort operation is finished.’,13,10,’$’ 要显示输出的信息一般定义在数据段。输出该字符串的指令为: MOV AH,9

MOV DX,SEG MESSAGE MOV DS,DX

MOV DX,OFFSET MESSAGE INT 21H

使用赋值伪操作可以使程序的可读性更好,另外也可以根据显示格式的要求使用TAB符,TAB的ASCII码为09。

CR EQU 13(CR EQU 0DH) LF EQU 10(LF EQU 0AH) TAB EQU 09

MESSAGE DB TAB,’The sort operation is finished’ DB CR,LF,’$’

使用INT 21H显示字符串,一定要在显示串之后加上定界符$丢失定界符可能在屏幕上引起意想不到的后果。

31


东华大学微机原理实验指导书2015(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:成本会计配套练习题答案1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: