《微型计算机原理与接口技术实验1复习课程.doc》由会员分享,可在线阅读,更多相关《微型计算机原理与接口技术实验1复习课程.doc(186页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。微型计算机原理与接口技术实验1-微型计算机原理与接口技术实验讲义目录第一章实验环境及实验步骤简介3一DOS环境下的汇编语言编程环境简介3二Debug的使用简介8第二章实验内容17实验一算术运算编程实验17实验二逻辑运算与移位操作编程实验19实验三数据串传送和查表程序20实验四分支程序设计21实验五循环程序设计24实验六子程序设计28实验七数制编码转换编程实验34实验八字符及字符串的输入/输出编程实验(设计性实验)38第三章综合性实验44实验九发声系统程序编程设计44实验十中断实验50附录一8086指令系
2、统一览表56附录二8086指令对标志位的影响63附录三8086宏汇编常用伪指令表64附录四ASCII码表66附录五DOS系统功能调用(INT21H)67附录六BIOS系统功能调用72附录七Debug命令表74第一章实验环境及实验步骤简介一、DOS环境下的汇编语言编程环境简介1.汇编语言源程序的汇编过程汇编语言源程序的汇编过程是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为.OBJ的目标文件、扩展名为.LST的列表文件和扩展名为.CRF的交
3、叉索引文件。目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。.LST和.CRF两个文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。在对源程序文件(ASM文件)汇编时,汇编程序将对ASM文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的
4、错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ文件。因此,汇编程序的主要功能可以概括为以下三点:(1)展开宏指令;(2)检查源程序中的语法错误,并给出错误信息;(3)产生目标程序文件(OBJ文件),并可给出列表文件(.LST文件)。汇编程序是系统提供的用于汇编的系统软件,目前常用的汇编程序有Microsoft公司推出的宏汇编程MASM(MACROASSEMBLER)和BORLAND公司推出的TASM(TURBOASSEMBLER)两种。Microsoft公司推出有宏汇编程序MASM和小汇编程序ASM两种,二者的区别在于:MASM有宏处理功能,而ASM没有宏处理功能,因此,MASM比A
5、SM的功能强大,但MASM需要占据较大的内存空间,当内存空间较小时(如64KB),只能使用ASM。2.目标程序的连接过程汇编后产生的目标程序(OBJ文件)并不是可执行程序文件(EXE文件),还不能直接运行,它必须通过连接程序(LINK)连接成一个可执行程序后才能运行。连接程序进行连接时,其输入有两个部分:一个是目标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以是高级语言(例如C语言)经编译后产生的目标文件;另一个是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。连接后输出两个文件,一是扩展名为.EXE的可执行文件,另一个是扩
6、展名为.MAP的内存分配文件。.MAP文件是连接程序的列表文件,又称为连接映像(LinkMap),它给出每个段在存储器中的分配情况,该文件可有可无。.EXE文件可以在操作系统下执行,还可以用DEBUG进行调试。3汇编语言程序设计上机过程举例编写程序,判断一个年份是否是闰年。汇编语言程序设计上机过程如图1.1所示。图1.1汇编语言程序上机过程(一)用编辑程序EDIT建立汇编语言源程序文件(ASM文件)例如,编写程序,判断一个年份是否是闰年的汇编语言源程序,可以在DOS模式下用编辑程序EDIT.EXE建立汇编语言源程序文件ABC.ASM,注意文件名的扩展名必须是.ASM。也可以在Windows20
7、00或者在WindowsXP环境下鼠标单击“开始”“运行”,在“运行”中输入“CMD”进入DOS模式,运行EDIT软件,例如:CEDITABC.ASM进入EDIT的程序编辑画面时,输入汇编语言源程序如下:DATASEGMENTINFONDB0DH,0AH,Pleaseinputayear:$YDB0DH,0AH,Thisisaleapyear!$NDB0DH,0AH,Thisisnotaleapyear!$WDW0BUFDB8DB?DB8DUP(?)DATAENDSSTACKSEGMENTstackDB200DUP(0)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:
8、STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXLEADX,INFONMOVAH,9INT21HLEADX,BUFMOVAH,10INT21HMOVCL,BUF+1XORCH,CHLEADI,BUF+2CALLDATACATECALLIFYEARSJCA1LEADX,NMOVAH,9INT21HJMPEXITA1:LEADX,YMOVAH,9INT21HEXIT:MOVAH,4CHINT21HDATACATEPROCNEARLEASI,BUF+2MOVBX,0X3:MOVAL,SISUBAL,30HMOVAH,0XCHGAX,BXMOVDX,10DMULDXXCHGA
9、X,BXADDBX,AXINCSILOOPX3MOVW,BXRETDATACATEENDPIFYEARSPROCNEARPUSHBXPUSHCXPUSHDXMOVAX,WMOVCX,AXMOVDX,0MOVBX,4DIVBXCMPDX,0JNZLAB1MOVAX,CXMOVBX,100DIVBXCMPDX,0JNZLAB2MOVAX,CXMOVBX,400DIVBXCMPDX,0JZLAB2LAB1:CLCJMPLAB3LAB2:STCLAB3:POPDXPOPCXPOPBXRETIFYEARSENDPCODEENDSENDSTART(二)用汇编程序MASM将ASM文件汇编成目标程序文件(OB
10、J文件)当源程序建立以后,仍以ABC.ASM程序为例,我们用汇编程序MASM对ABC.ASM源程序文件进行汇编,以便产生机器码的目标程序文件ABC.OBJ,其操作步骤如下:CMASMABCMicrosoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp19811985,1987.Allrightsreserved.ObjectfilenameABC.OBJ:SourcelistingNUL.LST:ABCCross-referenceNUL.CRF:ABC50674+450574Bytessymbolspacefree0Warning
11、Errors0SevereErrors由此可知,汇编程序调入后,首先显示版本号,然后出现三个提示行。第一个提示行为:ObjectfilenameABC.OBJ:这是询问目标程序文件名,方括号内为机器规定的默认的文件名,通常直接按回车键,表示采用默认的文件名(如上所示),这是我们汇编的主要目的。第二个提示行为:SourcelistingNUL.LST:这是询问是否建立列表文件。若不建立,直接回车;若要建立,可以输入文件名ABC再回车,表示要建立名为ABC的列表文件。列表文件中同时列出源程序和机器语言程序清单,并给出符号表,有利于程序调试。第三个提示行为:Cross-referenceNUL.CR
12、F:这是询问是否要建立交叉索引文件。若不建立,则直接回车;若要建立,可以输入文件名ABC,表示要建立ABC.CRF文件。由于.CRF是非文本文件,为了建立交叉索引文件,还必须调用CREF.EXE程序,即输入:CCREFABCMicrosoft(R)Cross-ReferenceUtilityVersion5.00Copyright(C)MicrosoftCorp19811985,1987.Allrightsreserved.listingABC.REF:17Symbols这时首先显示版本号,然后出现一个提示行:ListingABC.REF:这是询问交叉索引文件名。这时可用回车承认方括号内机器默
13、认的文件名,如上所示。这样就建立了ABC.REF文件。其内容是用户定义的所有符号(包括变量),并给出每个符号定义所在的行号(附以)以及引用的行号。如下是ABC.REF文件的内容:MicrosoftCross-ReferenceVersion5.00SatDec0118:49:422007SymbolCross-Reference(#definition,+modification)Cref-1A1.4247#BUF.15#35383955CODE.28#29111DATA.1#212930DATACATE.4053#80EXIT.4650#IFYEARS.4182#110INFON.2#32L
14、AB1.92103#LAB2.97102105#LAB3.104106#N.10#43STACK.22#222729START.30#112W.14#76+86X3.60#73Y.6#4717Symbols调入汇编程序,当我们回答了上述各提示行的询问之后,汇编程序就对源程序进行汇编。若汇编过程中发现源程序有语法错误,则列出有错误的语句和错误的代码。错误分警告错误(WraningErrors)和严重错误(SevereErrors)。警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数及行号、错误的性质等。这时,就要对错误进行分析,找出问题和原因,
15、然后再调用编辑程序加以修改,修改后重新汇编,直到汇编后无错误为止。(三)用连接程序LINK生成可执行程序文件(EXE文件)经汇编后产生的二进制的目标程序文件(OBJ文件)并不是可执行程序文件(EXE文件),必须经连接以后,才能成为可执行文件。连接程序并不是专为汇编语言程序设计的。如果一个程序是由若干个模块组成的,也可通过连接程序LINK把它们连接在一起。这些模块可以是汇编程序产生的目标文件,也可以是高级语言编译程序产生的目标文件。连接过程如下:CLINKABCMicrosoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp1983-19
16、87.Allrightsreserved.RunFileABC.EXE:ListFileNUL.MAP:ABCLibraries.LIB:在连接程序调入后,首先显示版本号,然后出现三个提示行。第一个提示行为:RunFileABC.EXE:这是询问要产生的可执行文件的文件名。一般直接回车采用方括号内规定的隐含文件名。第二个提示行为:ListFileNUL.MAP:这是询问是否要建立连接映象文件。若不建立,则直接回车;若要建立,则输入文件名再回车。如果要建立该文件,可以输入文件名ABC。第三个提示行为:Libraries.LIB:这是询问是否用到库文件。若无特殊需要,则直接回车即可。上述提示行回答
17、后,连接程序开始连接。若连接过程中有错,则显示错误信息,错误分析清楚后,要重新调入编辑程序进行修改,然后重新汇编,再经过连接,直至无错为止。连接以后,便产生了可执行程序文件(EXE文件)。(四)程序的执行当我们建立了可执行文件ABC.EXE后,就可直接在DOS下执行该程序:CABC根据程序提示,输入一个年份,计算机会输出是否闰年的结果。二Debug的使用简介通过编辑、汇编和连接后的程序是可以执行的程序。但是,一个程序特别是比较复杂的程序不能保证没有一点错误。因此,在投入正式运行前必须进行调试,以检查程序的正确性。调试程序Debug就是用来调试汇编语言程序的一种工具。Debug的主要功能有显示和
18、修改寄存器及内存单元的内容;按指定地址启动并运行程序;设置断点使程序分段运行,以便检查程序运行过程中的中间结果或确定程序出错的位置;反汇编被调试程序,它将一个可执行文件中的指令机器码反汇编成助记符指令并同时给出指令所在的内存地址;单条追踪或多条追踪被调试程序,它可以逐条指令执行或几条指令执行被调试程序,每执行一条(或几条)指令后,Debug程序将中断程序的运行并提供有关结果信息;汇编一段程序,在Debug的汇编命令下可以直接输入助记符指令,并将其汇编成可运行程序段。此外,Debug还可以将磁盘指定区的内容或一个文件装入到内存或将内存的信息写到磁盘上等等。启动Debug程序:在C盘搜索得到DEB
19、UG.EXE,然后双击,或在DOS状态下用下面的命令启动Debug程序:DEBUG路径文件名.扩展名Debug后面的文件名及路径是指被调试程序的文件名及路径,Debug后面的文件必须是程序的可执行文件,其扩展名可以是.EXE或.COM。在此命令后,DOS将调试程序Debug调入内存,Debug接着将被调程序送入内存。比如:DEBUG123.EXE(一)调试程序Debug的主要命令如下:(1)显示内存单元内容的命令D格式(1):-D地址从指定地址开始,显示128个字节的内容,每一行的左边显示段内偏移地址,接着显示16个单元的内容,最右边区域则显示这一行的16个单元所对应的可显示的字符。若无可显示
20、的字符,则用圆点(小数点)填充。D命令中的地址可为段内偏移量,也可为段基址和段内偏移量两部分,中间用冒号隔开,如1680:0110,即指段基址为1680H,段内偏移量为0110H。Debug中所显示的数据均为十六进制数,且省去了后面的H标志。格式(2):-D范围将显示指定地址范围内的内存单元的内容,起始地址可由段基址及段内偏移量两个部分组成,中间用冒号“:”隔开,也可以只指出段内偏移量,而此时的段基址在DS中。这里所说的范围包含起始地址和结束地址。比如DDS:10001020将显示数据段偏移地址为1000H到1020H的内容。(2)修改内存单元内容的命令E格式(1):-E地址内容表它的功能是用
21、给定的内容表去代替所指定的内存单元的内容。例如:EDS:011041CLOSE41该命令执行后,将用列表中的7个字符填入从DS:0110到DS:0116的7个存储单元中。格式(2):E地址它的功能是可以连续地逐个修改内存单元的内容。当屏幕上显示指定单元的地址和内容之后,可采取下列办法:若指定单元的内容需要修改,则将新的内容的十六进制数输入,再按空格键,修改便告完成,然后显示下一个存储单元的地址及内容,若需要修改,可进行同样的操作。若某一个单元的内容不需要修改,而操作又要进行下去,则可直接按空格键。若需要显示前一个单元的地址和内容,则输入连接号-,若要修改,则输入新的内容;若显示前一个单元的地址
22、和内容仍要修改,则可进行同样的操作;若显示的内容不需要修改,则可直接按-键,使该操作由高地址向低地址单元连续不断地进行。按键,结束E命令。(3)检查和修改寄存器内容的命令R格式(1):R此时将显示所有寄存器的内容和全部标志位的状态,以及现行CS:IP所指的机器指令代码和反汇编符号。格式(2):R寄存器名该格式可用于检查和修改指定寄存器的内容。若不修改其内容,可按键,若需要修改其内容,可以输入1-4个十六进制数,再按键。格式(3):RF该格式可用于显示标志和修改标志位状态。当系统给出标志位状态后,可采取下列办法:若不需要修改任一标志位,可按键。若需要修改一个或多个标志位,可输入其相反的值。各标志
23、位之间可以无空格且与顺序无关,修改后按键。由于标志位状态显示时,是用下列特殊符号表示的,因而修改时,只要输入规定的符号即可。下面是标志名和状态符号的对照表:标志名置位符号复位符号溢出标志OF(是/否)OVNV方向标志DF(减/增)DNUP中断标志IF(允许/禁止)EIDI符号标志SF(负/正)NGPL零标志ZF(是/否)ZRNZ辅助进位标志AF(是/否)ACNA奇偶校验标志PF(偶/奇)PEPO进位标志CF(是/否)CYNC只有追踪标志TF,不能用指令直接修改例如:输入RF命令,系统可能作出如下响应:OVDNEINGZRACPECY-若现在要修改奇偶、零、中断和溢出标志位,可在光标处输入:PO
24、NZDINV(4)运行程序命令G格式:G=地址地址地址该命令可以在程序运行中设置断点。它是Debug程序进行程序调试的主要命令之一。示例:-g001a则执行从当前cs:ip至001a的指令,注意:地址设置必须从指令的第一字节设起。第一个参数“=地址”规定了程序执行的起始地址,以CS内容作段地址,等号后面的地址只需给出地址偏移量。此时,命令G与地址之间的等号不能省去。如果在G命令执行前,已经设置了CS值和IP值,则也可以直接用G命令,从指定地址执行程序。格式中后面给出的地址是指断点地址,最多可设置10个断点。当程序执行到一个断点时,就停下来,显示CPU各寄存器的内容和标志位的状态,以及下一条待执
25、行的指令,被调试程序的所有断点全部被取消,并返回Debug。地址参数所指的单元,必须包含有效的8088指令的第一个字节,否则将产生不可预料的结果。堆栈必须至少包含有6个可用字节,否则也将产生不可预料的结果。若断点地址只包括地址偏移量,则认为段地址在CS寄存器中。(5)追踪命令T格式(1):T=地址该命令可以在指令执行中进行追踪,若略去地址,则从CS:IP现行值执行。每一次T命令都执行一条指令。格式(2):T=地址值此时,它可对多条指令进行追踪,即在执行了由值所指定的若干条指令之后,停止执行并显示各寄存器的内容和各标志位,还指出下一条待执行的指令。(6)汇编命令A若在调试目标程序的过程中,要求改
26、写或增添一段目标程序,则可以用A命令直接在Debug下实现。格式:A地址该命令可以从指定地址开始,将输入的汇编语言语句立即汇编成机器代码,连续存放在内存单元中。在程序输入完毕后,最后一行不输入内容,直接按回车键,即可返回DEBUG程序,还可用反汇编命令U对刚输入的内容进行反汇编,以验证输入的程序是否正确。使用A命令应遵守以下规则:所有输入数值,均为十六进制数。前缀助记符,必须在相关指令的前面输入,可以在同一行,也可以在不同行输入。段超越助记符为CS:、DS:、ES:、SS:。远调用时的返回指令助记符用RETF。使用串操作指令时,助记符中必须注明是字节还是字传送。汇编语言能自动汇编短、近和远的转
27、移及近和远的调用,也能由NEAR和FAR前缀来超越。例如:0110:0600JMP602;短转移0110:0602JMPNEAR605;近转移0110:0605JMPFAR60A;远转移第一条JMP指令中含有一个字节偏移量。第二条JMP指令中含有两个字节偏移量。第三条JMP指令中含有两个字节的偏移量及两个字节的段地址。当DEBUG不能确定某些操作数涉及的是字类型存储单元还是字节类型的存储单元时,在这种情况下,必须用前缀“WORDPTR”或“BYTEPTR”来加以说明。例如:NEGBYTEPTR128DECWORDSI当Debug不能确定一个操作数是立即数还是存储单元的地址时,可以把地址放在方括
28、号中。两个最常用的伪指令DB和DW可以在A命令中使用,用来直接把字节或字的值送入相应的存储单元。例如:DB2,5,3,4,THISISANEXAMPLEDW6000,2000,7000,BADebug支持所有形式的寄存器间接寻址命令。例如:ADDBX,74BP+3SI-5POPBX+DI(7)反汇编命令U格式(1):U地址该命令从指定的地址开始,反汇编32个字节。若略去指定地址,则以上一个U命令反汇编的最后一条指令地址的下一条指令地址作为起始地址;若没有用过U命令,则以由Debug初始化的段寄存器的值作段地址,以100作为地址偏移量。格式(2):U范围这种格式的命令,可以对指定范围的内存单元进
29、行反汇编,范围可以由起始地址、结束地址(只能包含地址偏移量)或起始地址及长度来指定。其命令格式如:U04BA:1000108或U04BA:0100L7两者是等效的。(8)输入命令I格式:I端口地址该命令从指定端口输入一个字节并显示。例如:I2E8CC它表示所显示的是从02E8端口输入的一个字节为CC。(9)输出命令O格式:O端口地址字节值其功能是向指定的端口输出一个字节。例如:O2E812它表示将一个字节12H送到输出端口2E8。(10)命名命令N格式:N文件标识符文件标识符该命令用给定的两个文件标识符格式化在CS:5C和CS:6C的两个文件控制块中(若在调用Debug时具有一个文件标识符,则
30、它已格式化在CS:5C的文件控制块中),文件控制块是将要介绍的装入命令L和写命令W所需要的。N命令能把文件标识符和别的参数放至CS:81开始的参数保存区中。在CS:80中保存输入的字符个数,寄存器AX保存前两个文件标识符中的驱动器标志。例如:ADEBUGNTESTLN命令后,用L命令可将TEST调入自己的CS:100开始的存储区中。若对正在调试的程序TEST进行调试时,需要用到其它的文件标识符及其它参数,也可用N命令加以实现。;例如:ADEBUGTESTN文件1文件2(11)装入命令L格式1:L其中的缺省值为CS:100。逻辑扇区可由物理扇区号换算得到,以双面双密度盘为例:物理扇区是按0面0道
31、1区,0面0道2区,0面0道9区,0面1道1区,0面39道9区,1面0道1区,1面39道9区排列。而逻辑扇区与物理扇区号的对应关系为物理扇区0面0道1扇区至9扇区,逻辑扇区号为08;物理扇区1面0道1扇区至9扇区,逻辑扇区号为911H;物理扇区0面1道1扇区至9扇区,逻辑扇区号为121AH;。这样每道先0面后1面一直排下去。其中为0、1或2,0表示A驱,1表示B驱,2表示硬盘。功能:将指定的盘上,从起,共n个逻辑扇区上的所有字节顺序读入指定内存地址开始的一片连续单元。当L后的参数缺省时,必须在L之前由N命令指定(或进入DEBUG时一并指出)所读驱动器文件名。此时L执行后将该文件装入内存。例如:
32、-NEXAMPLE-L将当前驱动器上的EXAMPLE文件装入CS:100起始的一片内存单元。格式2:L地址或L该命令把已在CS:5C中格式化的文件控制块所指定的文件装入到指定区域中。若省略地址,则装入到CS:100开始的内存区域中。若是带有扩展名.COM或.EXE文件,无论命令中是否指定了地址,一律装入到CS:100开始的内存区域中去。通常在BX和CX中包含了所读入文件的字节数,但对具有扩展名.EXE文件,则BX和CX中还包含实际程序长度。(12)写命令W功能:为LW命令指定待装入写盘文件格式1:W功能:与L命令不同的地方是将内存从起始的一片单元内容写入指定扇区。只有W而没有参数时,与N命令配
33、合使用将文件写盘。该命令把由地址所指定的内存区域中的数据写入指定的驱动器。若地址中只包含偏移量,则段地址在CS中。其中,扇区号决定了写入起始扇区;区段数决定了写入的区段个数;扇区号和区段数均用十六进制数表示。格式2:W地址或W该命令把指定内存区域中的数据,写入到由CS:5C处的文件控制块所规定的文件中去。若省略地址,则内存区域从CS:100开始。对于扩展名为.EXE或.HEX文件不能写入。因为这些文件的写入要用一种特殊格式,而此格式Debug程序不支持。(13)退出Debug命令Q格式:Q该命令退出Debug程序并返回DOS。Q命令并不把内存中的文件存盘,若需要存盘的话,应在退出前用W命令写入
34、磁盘。(二)Debug使用举例现有一个双字加法源程序如下,其中存在错误。现假设已汇编、连结生成了可执行文件HB.EXE,存放在d:MASM目录下。请使用Debug对其进行调试。CodeSEGMENTASSUMECS:code,DS:codeORG100H;从100H处开始存放下列指令Start:MOVAX,code;将DS置成code段的首地址MOVDS,AXMOVSI,200H;取第一个数的首地址MOVAX,SI;将第一个数的低16位取到AXMOVDI,204H;取第二个数的首地址ADDAX,DI;第一个数和第二个数的低16应相加MOVSI+8,AX;低16位相加的结果送到208H和209H
35、单元MOVAX,SI+2;取第一个数的高16位送到AX中ADDAX,DI+2;两个数的高16位相加MOVSI+10,AX;高16位相加的结果送到20AH,20BH单元MOVAX,4C00H;使用DOS的4CH号功能调用INT21H;进入功能调用,返回DOSORG200H;从200H处开始存放下列数据DD12345678h,654387A9h,0h;被加数、加数、和CodeENDSENDstart调试过程:进入Debug并装入可执行文件HB.EXED:MASMDebugHB.EXE-观察寄存器初始状态-RAX=0000BX=0000CX=020CDX=0000SP=0000BP=0000SI=0
36、000DI=0000DS=1892ES=1892SS=18A2CS=18A2IP=0100NVUPEIPLNZNAPONC18A2:0100B8A218MOVAX,18A2注:(1)以上显示的寄存器值,可能和你的电脑显示的不一样。(2)Debug中默认的进制是十六进制。以单步工作方式开始运行程序首先用T命令顺序执行用户程序的前l两条指令,将段寄存器DS预置为用户的数据段。-TAX=18A2BX=0000CX=020CDX=0000SP=0000BP=0000SI=0000DI=0000DS=1892ES=1892SS=18A2CS=18A2IP=0103NVUPEIPLNZNAPONC18A2
37、:01038ED8MOVDS,AX-TAX=18A2BX=0000CX=020CDX=0000SP=0000BP=0000SI=0000DI=0000DS=18A2ES=1892SS=18A2CS=18A2IP=0105NVUPEIPLNZNAPONC18A2:0105BE0002MOVSI,0200观察用户程序数据段初始内容-D20020F18A2:020078563412A9874365-0000000000741350xV4.Ce.t.P-连续工作方式运行程序至返回DOS前(设断点),查看运行结果。为此,现使用U命令反汇编。-U10018A2:0100B8A218MOVAX,18A218
38、A2:01038ED8MOVDS,AX18A2:0105BE0002MOVSI,020018A2:01088B04MOVAX,SI18A2:010ABF0402MOVDI,020418A2:010D0305ADDAX,DI18A2:010F894408MOVSI+08,AX18A2:01128B4402MOVAX,SI+0218A2:0115034502ADDAX,DI+0218A2:011889440AMOVSI+0A,AX18A2:011BB8004CMOVAX,4C0018A2:011ECD21INT21-可见,要执行10条指令,至011B处停止-G=100,011BAX=7777BX=
39、0000CX=020CDX=0000SP=0000BP=0000SI=0200DI=0204DS=18A2ES=1892SS=18A2CS=18A2IP=011BNVUPEIPLNZNAPENC18A2:011BB8004CMOVAX,4C00-D20020F18A2:020078563412A9874365-21DE777743438306xV4.Ce!.wwCC.-和为7777DE21H,正确。再取一组数据,查看运行结果。为此,首先用E命令修改数据。-E200CD,AB,78,56,90,EF,34,12-D20020F18A2:0200CDAB785690EF3412-21DE77774
40、3438306.xV.4.!.wwCC.-G=100,11BAX=68ACBX=0000CX=020CDX=0000SP=0000BP=0000SI=0200DI=0204DS=18A2ES=1892SS=18A2CS=18A2IP=011BNVUPEIPLNZNAPENC18A2:011BB8004CMOVAX,4C00-D20020F18A2:0200CDAB785690EF3412-5D9BAC6843438306.xV.4.hCC.-和为68AC9B5DH,错误。说明程序有问题。再将断点设在完成低位字加法后,查看运行结果。-G=100,112AX=9B5DBX=0000CX=020CD
41、X=0000SP=0000BP=0000SI=0200DI=0204DS=18A2ES=1892SS=18A2CS=18A2IP=0112NVUPEINGNZNAPOCY18A2:01128B4402MOVAX,SI+02DS:0202=5678-D20020F18A2:0200CDAB785690EF3412-5D9BAC6843438306.xV.4.hCC.-低位和为9B5D,正确。说明错误可能出在后面使用T命令从刚才的断点处向后单步调试,查看运行结果。-T=112AX=5678BX=0000CX=020CDX=0000SP=0000BP=0000SI=0200DI=0204DS=18A
42、2ES=1892SS=18A2CS=18A2IP=0115NVUPEINGNZNAPOCY18A2:0115034502ADDAX,DI+02DS:0206=1234-TAX=68ACBX=0000CX=020CDX=0000SP=0000BP=0000SI=0200DI=0204DS=18A2ES=1892SS=18A2CS=18A2IP=0118NVUPEIPLNZNAPENC18A2:011889440AMOVSI+0A,AXDS:020A=68AC-AX寄存器的结果为68AC,而应为68AD。可见是本条加法指令使用错误,这里应使用带进位加法指令。使用A命令装入正确指令后再次运行,察看结
43、果。-A11518A2:0115ADCAX,DI+0218A2:0118-G=100,11BAX=68ADBX=0000CX=020CDX=0000SP=0000BP=0000SI=0200DI=0204DS=18A2ES=1892SS=18A2CS=18A2IP=011BNVUPEIPLNZNAPONC18A2:011BB8004CMOVAX,4C00-D20020F18A2:0200CDAB785690EF3412-5D9BAD6843438306.xV.4.hCC.-和为68AD9B5DH,正确。对于这样一个简单程序一般来说不会再有问题。退出后修改源程序即可。退出-QD:需要说明的是此程
44、序很简单,只需使用T命令逐条单步调试即可。本例采用的调试方法似乎过于繁琐,但这是为了说明程序调试的一般方法,以便读者调试复杂程序时借鉴。第二章实验内容实验一算术运算编程实验实验目的:通过实验掌握下列知识:18088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。2求累加和程序和多字节加减法程序。实验内容和步骤:一、内存操作数及各种寻址方式使用:内容:MOVAX,1234MOV1000,AXMOVBX,1002MOVBYTEPTRBX,20MOVDL,39INCBXMOVBX,DLDECDLMOVSI,3MOVBX+SI,DLMOVBX+SI+1,DLMOVWORDPTRBX+SI+2,2846步骤