版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一显示程序实验1.emu8086介绍Emu8086-AssemblerandMicroprocessorEmulato是一个可在Windows环境下运行的8086CPU汇编仿真软件,Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,它优于一般编译器的地方在于提供了一个虚拟的80x86环境,拥有自己一套独立的硬件”,可以完成一些纯软件编译器无法完成的功能例如Led显示,交通灯,步进电机等等,而且动态调试(DEBUG)时非常方便一.软件启动启动界面如图1所示,用户可以选择新建文本、程序实例、启动指南、近期文档。XHKKHXXNXKXKXMKKMKX
2、UAHXriHKHX-XHKKKKXXKXMKXMKXMKXMHXriHXMXNKXNKXMXXXKXMKXMKXMHHXHKXHXX。,«'骂XIcxxlcKxwK-X算KX算Kxw骂KMXKMx-xwxxwTfx£XX昆KX球:c;,;*:£M耳*KM,x'xKlcx'xMxxwkxeXYKKX'NM耳,khxmx'kemu8086microprecessoremulator由thintegratedassemblerwrJ14n4mnowH;含codeexamplesquickstarttutorrecentfUe&a
3、mp;wwwmuSO'OGeCDiTii0*->V,ta?bnttWlplilteMpkl«ciltMlLui1C«riv#r1or&PtlMJthelp*二甲”即领:LM呐蚪昭心壮wcrpprncflsrfflulatar£叮.afileheret*open图l启动界面注册的用户名随意,密码112,即可成功。.新建文件单击图1中的“New”选项,软件会弹出如图2所示的选择界面ichoosecodet1ateCOMtemplate-simpleandtinyexecutablefileformat,puremachinecode.EXEtem
4、plate-advancedexecutablefile,header:rehcatim,.checksum.'fBINtemplate-purebinaryfile,Hqwwallsoftsof箱法ation名(advancedBOOTtemplate-forcreathgfloppydiskbootrecotds(veradvanced)Gempivworkspace::emdatoF,r«riiirniiHiriinriinariin?iruseFlatAssembler/Intelsyntax(see:fasinjcompatitiilfty.asminexanles
5、OKJCartcef;图?新建文本格式选择 COM模板一一适用于简单且不需分段的程序,所有内容均放在代码段中,程序代码默认从ORG0100H开始; EXE模板一一适用于需分段的复杂程序,内容按代码段、数据段、堆栈段划分。需要注意的是采用该模板时,用户不可将代码段人为地设置为ORG0100H,而应由编译器自动完成空间分配; BIN模板一一二进制文件,适用于所有用户定义结构类型; BOOT模板一一适用于在软盘中创建文件。此外,若用户希望打开一个完全空的文档,则可选择emptyworkspace的选项。三.编译和加载程序用户可根据上述选择的模板中编写程序,如图3所示。该编辑界面集文档编辑、指令编译、
6、程序加载、系统工具、在线帮助为一体,其菜单功能如表1所示;thisexamplehowtoaccessvirtualports10to6553bJ.;theseportsareenulatedinthisfile-c:efftu®0&6.io;thistechnologiyIowatomakeextemaladd-ondevices;foreittu8d6l.suchasleddisplays.robots.therm&meters.stepper-motorsB;anyohrcancreateananimaledvirtualdevice»:仁:、*ifi
7、uS006Wev1cesXleddlsplay+e«e*start*led_display.exe#etc*2223绍算窈劈翦羽#make_bln#ffi?©v力展立1234ut1991,ax图?文档编辑界面编写完程序后,用户只需单击工具栏上的“compile”按钮,即可完成程序的编译工作,并弹出如图4所示的编译状态界面。若有错误则会在窗口中提示,若无错误则还会弹出保存界面,让用户将编译好的文件保存相应的文件夹中。默认文件夹为,但您可以通过菜单中assembler/setoutputdirectory对默认文件夹进行修改。用户保存的文件类型与第一阶段所选择的模板有关。完成编
8、译和保存文件后,用户可按下图4中的“close”按钮先关闭该窗体,再利用工具栏上的“emulate;'按钮打开真器界面和原程序界面进行真调试,也可以按下图4中的Run按钮运行直接程序图4编译状态界面表1编译器菜单功能一级菜单名称二级菜单名称三级菜单名称功能file文件new新建comtemplatecom模板exetemplateexe模板bintemplatebin模板boottemplateboot模板example:实例open打开文件save;保存文件saveas另存为prints打印文件exporttoHTML;转换为超文本文件exit退出edit编辑undo取消redo重复
9、cut剪切cope复制paste粘贴selectallr选择全部find;查找findnext查找下一个replace代替indent缩进outdent凸出commentblock将被选块变为注释uncommentblock将被注释变为指令advancededitormacros高级宏汇编advanced:高级设置Showlinenumbers显小仃编会tabitfyselection:空格转换为定位字元untabitfyselection定位字兀转换为空格lowercaseselection用小写字母表示uppercaseselection用大写字母表示displaywhitespace显示
10、出空格出空间bookmark书签togglebookmark在光标处放置标签previousbookmark跳到个标签处nextbookmark跳到下一个标签处jumptofirst跳到第一个标签处jumptolastr跳到最后一个标签处clearallbookmark消除所有标签assembler汇编compile编译compileandloadintheemulation编译并加载到真器中fasmFasm汇编setoutputdirectory设置输出文件夹emulator真器showemulator显示真窗口assembleandloadintheemulator编译并加载到真器中mat
11、hr数学计算multibasecalculator多进制基本计算器baseconverter:基灯asciicodeASCII码表help帮助documentationandtutorials文档及指南checkforanupdate软件更新检查about关于软件四.仿真调试当用户完成程序编译后,利用工具栏中的“emulate;'按钮可将编译好的文件加载到仿真器进行真调试。除使用“emulate”按钮外,用户也可以用菜单栏中的assembler/compileandloadintheemulatiorlEemulator/assembleandloadintheemulator打开仿真
12、器。仿真器界面如图5所示。N.一024S00BX000A00h00>«0JEXX1XS-.ABOADbbbbbbVVTVVVVVVVVOONOOOOOOOOMMIMMMMMMMM区码油430800100564367005640426U18018000180841N01001002010112830B00)0830B00D0808E8C1B01B00C1B0B8D07100:07101:07102:3456789ABCDEF01H000000-00000011777777777777777U00000000000000区码n10Q01000100FFFU000000000口00X
13、XXXS3sppE*IsSABCDCLLSSBSDDE辅助工具工可打开存储器、寄存器、,运算器、停止口叱ug调试盲法行亭件一标3?恚一程序代和活的笠褐n寄存器区标记位窗口圉5仿真器界面当用户将程序加载到仿真器后,会同时打开仿真器界面和源程序界面,用户在仿真器界面中也可以同时看到源代码和编译后的机器码。点击的任意一条源程序指令,则对应的机器代码显示为被选显示状态,与此同时,上面的代码指针也会相应变化。用户也可以通过这种操作了解,数据段和堆栈段中各变量或数据在存储器中的情况。用户可以利用工具栏中的“singlestepf按钮进行单步跟踪调试,以便仔细观察各寄存器、存储器、变量、标记位等情况,这对于
14、程序初始调试时十分有用;当程序调试完毕,或需要连续运行观察时,则可以使用“run”按钮;当希望返回上一步操作时,则可以使用“stepback'按钮;若单击“reload”按钮,则真器会重新加载程序,并将指令指针指向程序的第一条指令;您也可以利用“load”按钮,从您保存的文件夹中加载其它程序。用户除使用上述工具栏中的按钮进行仿真调试外,还可以利用其菜单中的其它功能进行更高级的调试和设置。菜单的详细功能见表2所示。表2真器菜单功能一级菜单名称二级菜单名称功能file文件loadexecutable加载要执行的程序reload重新加载程序examples打开实例resetemulatora
15、ndram复位真器和RAMsetcommandlineparameter设置命令行参数settheemulator'sstate保存真器设置loadformpreviousstate载入原先保存的设置math数学计算multibasecalculator多进制基本计算器baseconverter基本转换器debugsinglestep单步跟踪singleover单步stepback单步返回stoponcondition设置停止运行的条件rununtil运行到光标处run连续运行setbreakpoint在光标处设置断点clearbreakpoint消除所有断点showcurrentbr
16、eakpoint显示当前断点指令showcurrentinstruction(atCS:IP)显示当前指令setCS:IPtoselectedposition将被选指令设定为当前指令view观察loganddebug.exeemulation打开debug调试窗口extendvalueviewer打开扩展数值观察器stack打开堆栈窗口variables打开变量窗口symboltable打开标记表listing显示源程序及目标文件内容originalsourcecode打开源程序代码窗口option软件高级设置,可对字体、颜色、义本格式、键盘输入等进行设置arithmetic&logi
17、calunit选择打开存储器、寄存器等单元,与AUX按钮功能相同flag打开标记位窗口lexicalflaganalyser打开文本说明格式的标记位窗口asciicode打开ASCII码表emulatorscreen打开模拟屏幕窗口external外部真器startdebug.exe启动windows的debug真调试器commandprompt打开DOS命令窗口run在DOS环境卜运行程序virtualdevices虚拟设备LED-Disply.exeLED显示器printer.exe打印机robit.exe机器人simple.exe读写端口simplest.exe在屏幕上读写端口stepp
18、ermotor.exe步进马达thermometer.exe温度控制tranfficlights交通灯控制VGA_STATE.exe显示屏控制Virtualdrive虚拟驱动盘bootformvirtualfloppy(floppy0)从虚拟的软盘中导入程序write512byteat0000:7C00tobootsector(floppy_0)(将存储器中07C00单元开始的512个字节写到软盘中write”.bin”filetofloppy将bin文件写至J软盘中createnewfloppydrive创建一个新的软盘2.实验目的(1)熟悉emu8086集成环境和调试器的使用。(2)掌握部
19、分DO%!能调用使用方法。3 .实验内容本实验要求显示一串字符。注释:INT10H是由BIOS对屏幕及显示器所提供的服务程序,这些服务程序也加挂在INT10H内使用INT10H中断服务程序时,先指定AH寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用INT10H。AH:00H一设置显示器模式AL:03H80X2516色文本AH:10H一设置颜色中断。AL:03H一触发闪烁/亮显位4 .参考程序:name"hi-world"thisexampleprintsout"helloworld!"byw
20、ritingdirectlytovideomemory.;invgamemory:firstbyteisasciicharacter,bytethatfollowsischaracterattribute.;ifyouchangethesecondbyte,youcanchangethecolorof;thecharacterevenafteritisprinted.;characterattributeis8bitvalue,;high4bitssetbackgroundcolorandlow4bitssetforegroundcolor.;hexbincolor;00000black;10
21、001blue;20010green;30011cyan;40100red;50101magenta;60110brown;70111lightgray;81000darkgray;91001lightblue;a1010lightgreen;b1011lightcyan;c1100lightred;d1101lightmagenta;e1110yellow;f1111whiteorg100h;setvideomodemovax,3;textmode80x25,16colors,8pages(ah=0,al=3)int10h;doit!;cancelblinkingandenableall16
22、colors:movax,1003hmovbx,0int10h;setsegmentregister:movax,0b800hmovds,ax;print"helloworld"firstbyteisasciicode,secondbyteiscolorcode.mov02h,'H'mov04h,'e'mov06h,Tmov08h,Tmov0ah,'o'mov0ch,','mov0eh,Wmov10h,'o'mov12h,'r'mov14h,Tmov16h,'d'
23、mov18h,'!'colorallcharacters:movcx,12;numberofcharacters.movdi|03h;|startfrombyteafter'h'c:movdi,11101100b;lightred(1100)onyellow(1110)adddi,2;skipovernextasciicodeinvgamemory.loopc;waitforanykeypress:movah,0int16hret5 .总结思考1 .DS数据段寄存器:数据所存放段的起始地址b800h,观察内存b800:0000的存放内容2 .movax,0b80
24、0hmovds,ax改为movds,0b800h是否可行实验二十进制数的BCD码加法运算程序实验1 .实验目的(1)掌握运算类指令编程及调试方法。(2)掌握运算类指令对各状态标志位的影响及测试方法。2 .实验原理(1)二进制数在计算机上进行运算是非常简单的。但是,通常人们习惯于用十进制数。在计算机中十进制数是用BCD码来表示的,BCD码有两类:一类叫压缩型BCD码,一类叫非压缩型BCD码。压缩BCD码与非压缩BCD码的区别一一压缩BCM的每一位用4位二进制表示,一个字节表示两位十进制数。例如10010110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4
25、位的00001001表示09.例如00001000B表示十进制数8.十进制BCD(8421)码000001000120010300114010050101601107011181000910018421BCD码是最基本和最常用的BCM,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。和四位自然二进制码不同的是,它只选用了四位二进制码中前10组代码,即用00001001分别代表它所对应的十进制数,余下的六组代码不用。用BC酗进行加、减、乘、除运算,通常采用两种方法:一种是在指令系统中设置一套专用于BCD码运算的指令;另一种是利用二进制数的运算指令算出结果,然后再用专门的
26、指令对结果进行修正(调整),使之转变为正确的BCD码表示的结果。8086/8088指令系统所采用的是后一种方法。BCM的运算规则:BCM是十进制数,而运算器对数据做加减运算时,都是按二进制运算规则进行处理的。这样,当将BCD码传送给运算器进行运算时,其结果需要修正。修正的规则是:当两个BCD码相力口,如果和等于或小于1001(即十进制数9),不需要修正;如果相加之和在1010到1111(即十六进制数0AH0FH)之间,则需加6进行修正;如果相加时,本位产生了进位,也需加6进行修正。这样做的原因是,机器按二进制相加,所以4位二进制数相加时,是按“逢十六进一”的原则进行运算的,而实质上是2个十进制
27、数相加,应该按“逢十进一”的原则相加,16与10相差6,所以当和超过9或有进位时,都要加6进行修正。需要修正BCD码运算值的举例。(1)计算5+8;(2)计算8+8解:(1)将5和8以8421BCD输入机器,则运算如下:+)10001101结果大于9+)0110加6修正10011即13的BCD码结果是0011,即十进制数3,还产生了进位。5+8=13,结论正确。(2)将8以8421BCD输入机器,则运算如下:1000+)100010000结果大于9+)0110加6修正1011016的BCM结果是0110,即十进制的6,而且产生进位。8+8=16,结论正确。(2)非压缩型BC加加法调整指令AAA
28、(ASCIIAdjustforAddition)指令格式:AAAAAA也称为加法的ASCII调整指令。指令后面不写操作数,但实际上隐含累加器操作数AL和AH指令的操作为:如果(AL)A0FH>9,或(AF)=1则(AL)(AL)+06H(AH)(AH)+1(AF)-1(CF)一(AF)(AL)一(AL)A0FH)否则(AL)(AL)A0FH)由上可见,指令将影响AF和CF标志,但状态标志位SF、ZF、PF和OF的状态不确定。在用AAA指令调整以前,先用指令ADD(多字节加法时用ADC进行8位数的加法运算,相加结果放在AL中,用AAA指令调整后,非压缩型BCM结果的低位在AL寄存器,高位在
29、AH寄存器。3 .实验内容:本实验要求计算X+Y=Z,其中,X、Y、Z为BCM,其中X=09H,Y=05HL4 .参考程序:;thisexampleshowstheuseofaaainstruction(asciiadjustafteraddition).;name"bcd_aaa”100h;firstnumber'9':movah,09h;secondnumber'5':moval,05h;al=al+ah=;=09h+05h=0ehaddal,ah;cleartensbyteofbcd;
30、result:xorah,ah;adjustresulttobcdform,;ah=1,al=4->'14'aaa;printtheresult:;storecontentsof;axregister:movdx,ax;printfirstdigit:movah,0eh;converttoascii:ordh,30hmoval,dhint10h;printseconddigit:;converttoascii:ordl,30hmoval,dlint10h;waitforanykeypress:movah,0int16hret;returncontroltooperatin
31、gsystem.5总结思考:xor指令含义;aaa指令的操作过程实验三串操作类指令应用程序1 .实验目的(1)掌握串操作类指令编程及调试方法。(2)掌握串操作类指令对各状态标志位的影响及测试方法。2 .实验原理(1)在计算机中,大部分数据存放在主存中,8086CPU提供了一组处理主存中连续存放的数据串的指令串操作指令。串操作指令中,源操作数用寄存器SI寻址,默认在数据段DS中;目的操作数用寄存器DI寻址,默认在附加段ES中。每执行一次串操作指令,作为源地址指针的SI和作为目的地址指针的DI将自动修改:+/-1(对于字节串)或+/-2(对于字串)。地址指针时增加还是减少取决于方向标志DF。在系统
32、初始化后或者执行指令CLD指令后,DF=0,此时地址指针增1或2;在执行指令STD后,DF=1,此时地址指针减1或2。串操作指令寻址方式:源操作数和目的操作数分别使用寄存器DS:SI和ES:DI进行间接寻址,源指针DS:SI和目的指针ES:DI将自动进行修改:±1、±2、±4,其对应的分别是字节操作、字操作和双字操作。串比较指令:CMPSB字节串比较:DS:SI-ES:DI,SISI+/-1,DIDI+/-1CMPSW序串比较:DS:SI-ES:DI,SISI+/-2,DIDI+/-2比较指令的功能是比较源串与目的串是否相同,并根据其减法结果设置标志位;指令在每次
33、比较后修改SI和DI寄存器的值,使之指向下一个元素。串扫描指令:格式1:SCASB;字节操作功能1:AL(DI),DI-DI±1格式2:SCASW;字操作功能2:AXH(DI),DI-DI±2重复前缀指令:任何一个串操作指令,都可以在前面加一个重复前缀,以实现串操作的重复执行,重复次数隐含在CX寄存器中REP;REPtr缀用在MOVSSTOSLODS旨令前,每次执行一次才旨令,CX减1;直至|JCX=0,重复执行结束.REPZ;也可以表示为REPE用在CMPSSCAS指令前,每执行一次串指令CX减1,并判断ZF标志是否为0;只要CX=0或ZF=0,则重复执行结束。REPNZ
34、也可以表达为REPNE用在CMPSSCAS指令前,每执行一次串操作指令CX减1,并判断ZF标志是否为1,只要CX=0或ZF=1,则重复执行结束。REP前缀可以理解为“当数据串没有结束(CXW0),则继续传送”REPZ/REPEt缀可以理解为“当数据串没有结束(CXW0),并且串相等(ZF=1)则继续比较”REPNZ/REPN前缀可以理解为“当数据串没有结束(CXW0),并且串不相等(ZF=0)则继续比较”2 2)$是指当前指令的地址3 .实验内容3.1 利用repecmps指令比较两个字符串是否相等。若相等,显示字符Y,否则显示N。3.2 利用repnescasb指令在一个字符串中查找一个指定
35、的字符。4 .参考程序:4.1 ;"cmpsb"org100h;setforwarddirection:cld;loadsourceintods:si,;loadtargetintoes:di:movax,csmovds,axmoves,axleasi,str1leadi,str2;setcountertostringlength:movcx,size;compareuntilequal:repecmpsbjnznot_equal;"yes"-equal!m
36、oval,'y'movah,0ehint10hjmpexit_herenot_equal:;"no"-notequal!moval,'n'movah,0ehint10hexit_here:;waitforanykeypress:movah,0int16hret;stringsmusthaveequallengths:x1:str1db'teststring'str2db'teststring'size=($-x1)/24.2 ;thissampleshowshowtousescasbinstructiontof
37、100hjmpstartstr1db'aaabbbxddd's_founddb'"yes"-found!',0Dh,0Ah,'$'s_notdb'"no"-notfound!',0Dh,0Ah,'$'find_whatequ'x'start:;setforwarddirection:cld;setcountertostringsize:movcx,10;loadstringaddressintoes:dimovax,csmoves,
38、axleadi,str1;wewilllookforthecharacterinstring:moval,find_whatrepnescasbjzfoundnot_found:;"no"-notfound!movdx,offsets_notmovah,9int21hjmpexit_herefound:;"yes"-found!movdx,offsets_foundmovah,9int21h;waitforanykeypress.movah,0int16hexit_here:ret5 .思考写出参考程序1和2的流程图实验四堆栈指令程序1 .实验目的(1)
39、掌握堆栈类指令编程及调试方法。(2)掌握堆栈类指令对各状态标志位的影响及测试方法。2 .实验原理堆栈是存储器中专用的缓冲区,用于暂存寄存器数据或地址指针,push/pop就用于堆栈的操作,这两个指令一般用在:1 .子程序调用,为了保护现场,把所要用的寄存器中的内容先暂时保存起来,在子程序调用结束之前,按照先进后出的原则,把数据恢复。2 .有时候,需要临时用一下某些寄存器,也可用一下,凭个人喜好。堆栈是一个先进后出的主存区域,位于堆栈段中,使用SS段寄存器记录器段地址。栈只有一个出口,即当前栈顶。栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。堆栈的两种基本操作,对应两条基本指令:(1
40、)进栈指令push进栈指令先使堆栈指令sp减2,然后把一个字操作数存入堆栈顶部。堆栈操作的对象只能是字操作数,进栈时底字节存放于低地址,高字节存放于高地址,sp相应向低地址移动两个字节单元。(2)出栈指令pop出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针sp加2。目的操作数应为字操作数,字从栈顶弹出时,低地址字节送低字节,高地址字节送高字节。注意:因为堆栈指针sp总是指向已经存入数据的栈顶(不是空单元),所以PUSH旨令是将(SP)减2,后将内容压栈(即先修改SP是指指向空单元,后压入数据),而POP是先从栈顶弹出一个字,后将堆栈指针SP加2.用PUSH旨令和POP旨令时只能按字
41、访问堆栈,不能按字节访问堆栈。3 .实验内容通过堆栈指令观察堆栈寄存器内容的变化4 .参考程序:;thissampleshowshowthestackworks.;click'stack'buttoninemulatortoseethecontentsofthestack.;stackisimportantelementincomputerarchitecture.;thiscodedoesnothinguseful,exceptprinting"Hi""stack"org100h;createtinycomfi
42、le.movax,1234hpushaxmovdx,5678hpushdxpopbxpopcx;functioncallpushesipvalueofthenextinstruction:calltfuncmovax,7890hpushaxpopbx;interruptsarelikefuntions,;butinadditiontheypushcodesegmentintothestackmovax,3int10h;setstandartvideomode.;atypicaluseofstackistosetsegmentregisters.;setdstovideomemorysegmen
43、t:movax,0b800hpushaxpopds;print"hi":mov170h,'H'mov172h,'i'colorattributefor'h'mov171h,11001110b;colorattributefor'i'mov173h,10011110b;waitforanykeypressah,016hmovint;herewe"pop"theipvalue,;andreturncontroltotheoperatingsystem:ret;thetestprocedure:t
44、funcprocxorbx,bxxorcx,cx;herewe"pop"theipvalue,;andreturncontroltothemainprogram:retendp5 .思考列出参考程序的堆栈内容变化过程实验五求找最大值和最小值程序设计1 .实验目的(1)掌握比较类指令编程及调试方法。(2)掌握综合程序的设计及调试2 .实验原理微机系统的内存是分段管理的,为了与之相对应,汇编语言源程序也分若干个段来构成8086CPU有四个段寄存器CS,DS,ED,SS.2.1 段定义段名SEGMENT,;段内的具体内容,段名ENDS例如参考程序的数据段DDATASEGMENTM
45、ES1DB'Theleastnumberis:$'MES2DB0AH,0DH,'Thelargestnumberis:$'NUMBDB0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9HDDATAENDS代码段CODESEGMENTASSUMECS:CODE,DS:DDATA;CODEENDS2.2 段寄存器说明语句每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式:ASSUME段寄存器名:段名,段寄存器名:段名,.(1) 通常情况下,代码段的第一条语句就是用ASSUME语句来说明段寄存器与段之间的对应关系。参考程序ASS
46、UMECS:CODE,DS:DDATA该语句说明:CS对应于彳码段CODE,DS对应于数据段DDATA(2) ASSUME说明语句只起说明作用,它不会对段寄存器赋值,所以,必须对有关段寄存器赋值,参考程序代码:MOVAX,DDATAMOVDS,AX(3) 代码段寄存器不能由程序员在源程序中对其赋值,其值是由操作系统在装入它进入系统运行时自动赋值的(4) 堆栈段是一个特殊的段,在程序中可以定义它,也可以不定义。除了要生成COM型执行文件的源程序外,一个完整的源程序一般最好定义堆栈段。如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个64K字节的堆栈段。在源程序中,可用以
47、下方法来定义堆栈段STACK1SEGMENTSTACK定义一个堆栈段,其段名为STACK1DB256DUPSTACK1ENDS上述段定义说明该段是堆栈段,系统会自动把段寄存器SS和栈顶寄存器SP与该堆栈段之间建立相应的关系,并设置其初值,而不用在代码段对它们进行赋值2.3 伪指令END完整的源程序是分段结构形式,由若干逻辑段组成,整个源程序以END语句结束。伪指令END表示源程序到此为止,汇编程序对该语句之后的任何内容都不作处理,所以,通常情况下,伪指令END是源程序的最后一条语句。伪指令END后面可附带一个在程序中已定义的标号,由该标号指明程序的启动位置2.4条件转移表格分类指令转移条件说明
48、(I)转移条件为单个标志位JZ/JEZF=1为零/相等,则转移JNZ/JNEZF=0不为零/不相等,则转移JSSF=1为负,则转移JNSSF=0为正,则转移JOOF=1溢出,则转移JNOOF=0不溢出,则转移JPPF=1奇偶位为1,则转移JNPPF=0奇偶位为0,则转移JCCF=1进位位为1,则转移JNCCF=0进位位为0,则转移(n)两个无符号数比较JB/JNAE/JCCF=1低于/不高于等于,则转移JNB/JAE/JNCCF=0不彳什/高于等于,则转移JBE/JNA(CF*ZF)=1低于等于/不高,则转移JNBE/JA(CF*ZF)=0不低于等于/高于,则转移(出)两个后符号数比较JL/J
49、NGE(SF*OF)=1小于/不大于等于,则转移JNL/JGE(SF*OF)=0不小于/大于等于,则转移JLE/JNG(SF*OF)*ZF)=1小于等于/不大于,则转移JNLE/JG(SF*OF)*ZF)=0不小于等于/大于,则转移(IV)测试CX的值是否为零则转移JCXZ(CX)=0CX的内容为0,则转移2.5汇编常用的INT21H系统调用(1)输出显示一个字符(AH=2)功能:输出DL寄存器中的字符到显示器。入口参数:被输出显示的字符或者字符ASCII码送到DL寄存器中调用方法MOVDL,字符码MOVAH,2INT21H执行完上面的调用后,显示器显示出DL中的字符。(2)输出一个字符串(A
50、H=9)功能:输出显示一个以为"字符结尾的字符串到显示器。入口参数:口*二字符串偏移地址;口$=字符串的段地址调用方法MOVAX,字符串所在的段地址MOVDS,AXMOVDX,字符串的首址偏移地址MOVAH,9INT21H执行上面调用,输出以DS:DX为首地址,"$”为结尾的字符串到显示器中。若要在显示字符串光标自动回车换行,则在"$"字符前面加上0DH(回车),0AH(换行)字符。(3)带返回码的结束(AH=4CH)功能:返回DOS入口参数:无调用方法MOVAH,4CHINT21H通过4CH功能调用能够结束当前正在执行的程序,返回DOS系统,一般用于汇编程序的结束位置3 .实验内容本实验要求通过求无符号字节序列中的最大值和最小值并显示。4 .参考程序STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDDATASEGMENTMES1DB'Theleastnumberis:$'MES2DB0AH,0DH,'Thelargest
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026陕西宝鸡市凤县中医医院招聘1人备考题库含答案详解(完整版)
- 2026云南昆明嵩明县中医医院看守所卫生所合同制专业技术人员招聘3人备考题库附答案详解(基础题)
- 2026山东外事职业大学康复中心招聘备考题库附答案详解(满分必刷)
- 2026内蒙古鄂尔多斯市东胜区社会工作协会工作人员招聘1人备考题库及答案详解(新)
- 2026湖北黄石市西塞山区综治中心招聘聘用制工作人员1人备考题库及1套参考答案详解
- 2026安徽黄山徽投新安人才服务有限公司招聘劳务派遣人员2人备考题库(含答案详解)
- 2026年甘肃省兰州市学府致远学校初高中学科教师招聘16人备考题库附答案详解(突破训练)
- 2026合肥水泥研究设计院有限公司设计工程公司招聘20人备考题库附答案详解(能力提升)
- 2026新疆阿勒泰布尔津县社会补充招聘编制外医疗卫生工作人员1人备考题库及一套参考答案详解
- 2026贵州云开投资有限公司招聘备考题库及答案详解(夺冠系列)
- FOCUS-PDCA医院品质管理获奖案例-提高住院患者入院宣教知晓率
- 2024年全国初中数学竞赛试题含答案
- 2023年四川省绵阳市中考化学试卷真题(含答案与解析)
- 危重症患者并发症的预防及护理
- 医院培训课件:《急性阑尾炎》
- 连云港职业技术学院招聘真题
- 语文说课课件全国创新杯大赛一等奖
- 平改坡规范参考教学课件
- 国际救生设备规则
- 2023年中医医师定期考核专业理论知识考试题库及答案(共600题)
- 隧道工程施工日常安全检查清单
评论
0/150
提交评论