ImageVerifierCode 换一换
格式:DOC , 页数:43 ,大小:337.04KB ,
资源ID:2280260      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2280260.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(微机原理Emu8086仿真软件实验讲义.doc)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

微机原理Emu8086仿真软件实验讲义.doc

1、完整版)微机原理Emu8086仿真软件实验讲义 实验一 显示程序实验 1.emu8086介绍 Emu8086—Assembler and Microprocessor Emulator是一个可在Windows 环境下运行的8086CPU汇编仿真软件, Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,它优于一般编译器的地方在于提供了一个虚拟的80x86环境,拥有自己一套独立的“硬件”,可以完成一些纯软件编译器无法完成的功能例如Led显示,交通灯,步进电机等等,而且动态调试(DEBUG)时非常方便 一.软件启动 启动界面如图1所示,用户

2、可以选择新建文本、程序实例、启动指南、近期文档。 注册的用户名随意,密码112,即可成功。 二.新建文件 单击图1中的“New”选项,软件会弹出如图2所示的选择界面。 ●          COM模板——适用于简单且不需分段的程序,所有内容均放在代码段中,程序代码默认从ORG 0100H开始; ●          EXE模板--适用于需分段的复杂程序,内容按代码段、数据段、堆栈段划分。需要注意的是采用该模板时,用户不可将代码段人为地设置为ORG 0100H,而应由编译器自动完成空间分配; ●          BIN模板--二进制文件,适用于所有用户定义结构类型;

3、●          BOOT模板—-适用于在软盘中创建文件。 此外,若用户希望打开一个完全空的文档,则可选择empty workspace的选项。   三.编译和加载程序 用户可根据上述选择的模板中编写程序,如图3所示。该编辑界面集文档编辑、指令编译、程序加载、系统工具、在线帮助为一体,其菜单功能如表1所示. 编写完程序后,用户只需单击工具栏上的“compile”按钮,即可完成程序的编译工作,并弹出如图4所示的编译状态界面.若有错误则会在窗口中提示,若无错误则还会弹出保存界面,让用户将编译好的文件保存相应的文件夹中。默认文件夹为…\emu8086\MyBuild\,但您可以通过

4、菜单中assembler/ set output directory对默认文件夹进行修改。用户保存的文件类型与第一阶段所选择的模板有关。 完成编译和保存文件后,用户可按下图4中的“close”按钮先关闭该窗体,再利用工具栏上的“emulate”按钮打开真器界面和原程序界面进行真调试,也可以按下图4中的Run按钮运行直接程序。   表1编译器菜单功能 一级菜单名称 二级菜单名称 三级菜单名称 功能 file     文件   new   新建     com template com模板     exe template exe模板  

5、   bin template bin模板     boot template boot模板 example     实例 open     打开文件 save     保存文件 save as     另存为 prints     打印文件 export to HTML     转换为超文本文件 exit     退出 edit     编辑 undo     取消 redo     重复 cut     剪切 cope     复制 paste     粘贴 sel

6、ect all     选择全部 find     查找 find next     查找下一个 replace     代替 indent     缩进 outdent     凸出 comment block     将被选块变为注释 uncomment block     将被注释变为指令 advanced editor macros     高级宏汇编 advanced     高级设置   Show line numbers   显示行编号   tabitfy selection  

7、 空格转换为定位字元   untabitfy selection   定位字元转换为空格   lowercase selection   用小写字母表示   uppercase selection   用大写字母表示   display white space   显示出空格出空间 bookmark     书签   toggle bookmark   在光标处放置标签   previous bookmark   跳到上一个标签处   next bookmark   跳到下一个标签处   jump to first  

8、 跳到第一个标签处   jump to last   跳到最后一个标签处   clear all bookmark   清除所有标签 assembler     汇编   compile   编译   compile and load in the emulation   编译并加载到真器中   fasm   Fasm汇编   set output directory   设置输出文件夹 emulator     真器   show emulator   显示真窗口   assemble and load in

9、the emulator   编译并加载到真器中 math     数学计算   multi base calculator   多进制基本计算器   base converter   基本转换器 ascii code     ASCII 码表 help     帮助   documentation and tutorials   文档及指南   check for an update   软件更新检查   about 关于软件 四.仿真调试 当用户完成程序编译后,利用工具栏中的“emulate”按钮

10、可将编译好的文件加载到仿真器进行真调试。除使用“emulate”按钮外,用户也可以用菜单栏中的assembler/compile and load in the emulation或emulator/assemble and load in the emulator打开仿真器。仿真器界面如图5所示。 当用户将程序加载到仿真器后,会同时打开仿真器界面和源程序界面,用户在仿真器界面中也可以同时看到源代码和编译后的机器码.点击的任意一条源程序指令,则对应的机器代码显示为被选显示状态,与此同时,上面的代码指针也会相应变化。用户也可以通过这种操作了解,数据段和堆栈段中各变量或数据在存储器中的情况。

11、 用户可以利用工具栏中的“single step”按钮进行单步跟踪调试,以便仔细观察各寄存器、存储器、变量、标记位等情况,这对于程序初始调试时十分有用;当程序调试完毕,或需要连续运行观察时,则可以使用“run”按钮;当希望返回上一步操作时,则可以使用“step back”按钮;若单击“reload”按钮,则真器会重新加载程序,并将指令指针指向程序的第一条指令;您也可以利用“load”按钮,从您保存的文件夹中加载其它程序。用户除使用上述工具栏中的按钮进行仿真调试外,还可以利用其菜单中的其它功能进行更高级的调试和设置.菜单的详细功能见表2所示。 表2真器菜单功能 一级菜单名称 二级菜单名称

12、 功能 file   文件   load executable… 加载要执行的程序   reload 重新加载程序   examples 打开实例   reset emulator and ram 复位真器和RAM   set command line parameter 设置命令行参数   set the emulator’s state 保存真器设置   load form previous state 载入原先保存的设置 math   数学计算   multi base calculator 多进制基本计算器   base

13、 converter 基本转换器 debug single step 单步跟踪   single over 单步   step back 单步返回   stop on condition 设置停止运行的条件   run until 运行到光标处   run 连续运行   set break point 在光标处设置断点   clear break point 清除所有断点   show current break point 显示当前断点指令   show current instruction (at CS :IP)

14、 显示当前指令   set CS:IP to selected position 将被选指令设定为当前指令 view   观察   log and debug.exe emulation 打开debug。调试窗口   extend value viewer 打开扩展数值观察器   stack 打开堆栈窗口   variables 打开变量窗口   symbol table 打开标记表   listing 显示源程序及目标文件内容   original source code 打开源程序代码窗口   option 软件高级设置,可对

15、字体、颜色、文本格式、键盘输入等进行设置   arithmetic & logical unit 选择打开存储器、寄存器等单元,与AUX按钮功能相同   flag 打开标记位窗口   lexical flag analyser 打开文本说明格式的标记位窗口   ascii code 打开ASCII码表   emulator screen 打开模拟屏幕窗口 external   外部真器   start debug。exe 启动windows的debug真调试器   command prompt 打开DOS命令窗口   run 在DOS

16、环境下运行程序 virtual devices   虚拟设备   LED-Disply。exe LED显示器   printer。exe 打印机   robit.exe 机器人   simple。exe 读写端口   simplest.exe 在屏幕上读写端口   stepper_motor。exe 步进马达   thermometer。exe 温度控制   tranffic_lights 交通灯控制   VGA_STATE.exe 显示屏控制 Virtual drive   虚拟驱动盘   boot form virtua

17、l floppy (floppy_0) 从虚拟的软盘中导入程序   write 512 byte at 0000:7C00 to boot sector (floppy_0) ( 将存储器中07C00单元开始的512个字节写到软盘中   write “。bin” file to floppy 将bin文件写到软盘中   create new floppy drive 创建一个新的软盘 2。实验目的 (1) 熟悉emu8086集成环境和调试器的使用。 (2) 掌握部分DOS功能调用使用方法。 3.实验内容 本实验要求显示一串字符. 注释: IN

18、T 10H是由BIOS对屏幕及显示器所提供的服务程序,这些服务程序也加挂在INT 10H内.使用INT 10H中断服务程序时,先指定AH寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用 INT 10H。 AH:00H -设置显示器模式 AL:03H -80×25  16色 文本 AH: 10H -设置颜色中断. AL: 03H — 触发闪烁/亮显位 4。参考程序: name "hi—world” ; this example prints out ”hello world!" ; by writin

19、g directly to video memory。 ; in vga memory: first byte is ascii character, byte that follows is character attribute. ; if you change the second byte, you can change the color of ; the character even after it is printed. ; character attribute is 8 bit value, ; high 4 bits set background color a

20、nd low 4 bits set foreground color. ; hex bin color ; ; 0 0000 black ; 1 0001 blue ; 2 0010 green ; 3 0011 cyan ; 4 0100 red ; 5 0101 magenta ; 6 0110 brown ; 7 0111 light gray ; 8 1000

21、dark gray ; 9 1001 light blue ; a 1010 light green ; b 1011 light cyan ; c 1100 light red ; d 1101 light magenta ; e 1110 yellow ; f 1111 white org 100h ; set video mode mov ax, 3 ; text mode 80x25, 16 c

22、olors, 8 pages (ah=0, al=3) int 10h ; do it! ; cancel blinking and enable all 16 colors: mov ax, 1003h mov bx, 0 int 10h ; set segment register: mov ax, 0b800h mov ds, ax ; print "hello world” ; first byte is ascii code, second byte is color code。 mov [02h], ’H’

23、 mov [04h], 'e’ mov [06h], 'l’ mov [08h], ’l’ mov [0ah], 'o’ mov [0ch], ’,’ mov [0eh], ’W' mov [10h], 'o’ mov [12h], 'r' mov [14h], 'l' mov [16h], ’d' mov [18h], '!’ ; color all characters: mov cx, 12 ; number of characters。 mov di, 03h ; start from byte after '

24、h' c: mov [di], 11101100b ; light red(1100) on yellow(1110) add di, 2 ; skip over next ascii code in vga memory。 loop c ; wait for any key press: mov ah, 0 int 16h ret 5.总结思考 1.DS数据段寄存器:数据所存放段的起始地址b800h,观察内存b800:0000的存放内容 2。 mov ax, 0b800h mov ds, ax 改为mov

25、 ds, 0b800h是否可行 实验二 十进制数的BCD码加法运算程序实验 1。实验目的 (1) 掌握运算类指令编程及调试方法。 (2) 掌握运算类指令对各状态标志位的影响及测试方法. 2.实验原理 (1)二进制数在计算机上进行运算是非常简单的。但是,通常人们习惯于用十进制数。在计算机中十进制数是用BCD码来表示的,BCD码有两类:一类叫压缩型BCD码,一类叫非压缩型BCD码。压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数.例如10010110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四

26、位总是0000,低4位的0000~1001表示0~9.例如00001000B表示十进制数8. 8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。和四位自然二进制码不同的是,它只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,余下的六组代码不用。 用BCD码进行加、减、乘、除运算,通常采用两种方法:一种是在指令系统中设置一套专用于BCD码运算的指令;另一种是利用二进制数的运算指令算出结果,然后再用专门的指令对结果进行修正(调整),使之转变为正确的BCD码表示的结果。8086/

27、8088指令系统所采用的是后一种方法。 BCD码的运算规则:BCD码是十进制数,而运算器对数据做加减运算时,都是按二进制运算规则进行处理的。这样,当将 BCD码传送给运算器进行运算时,其结果需要修正。修正的规则是:当两个BCD码相加,如果和等于或小于 1001(即十进制数9),不需要修正;如果相加之和在 1010 到1111(即十六进制数 0AH~0FH)之间,则需加 6 进行修正;如果相加时,本位产生了进位,也需加 6 进行修正。这样做的原因是,机器按二进制相加,所以 4 位二进制数相加时,是按“逢十六进一”的原则进行运算的,而实质上是 2 个十进制数相加,应该按“逢十进一"的原则相加,1

28、6 与10相差 6,所以当和超过 9或有进位时,都要加 6 进行修正。  需要修正 BCD码运算值的举例. (1) 计算 5+8;(2) 计算 8+8 解:(1) 将 5 和 8 以 8421 BCD输入机器,则运算如下: 0 1 0 1 +) 1 0 0 0 1 1 0 1 结果大于 9 +) 0 1 1 0 加 6 修正 1 0 0 1 1 即13 的 BCD码 结果是 0011,即十进制数3,还产生了进位。5+8=13,结论正确。 (2)将8以8421 BCD输入机器,则运算如下: 1 0 0 0 +)1 0 0 0 1 0 0 0 0 结果大于9 +)0 1

29、 1 0 加6修正 1 0 1 1 0 16的BCD码 结果是0110,即十进制的6,而且产生进位。8+8=16,结论正确. (2)非压缩型BCD码加法调整指令AAA (ASCII Adjust for Addition)     指令格式: AAA     AAA也称为加法的ASCII调整指令。指令后面不写操作数,但实际上隐含累加器操作数AL和AH。指令的操作为:  如果  (AL)∧0FH>9,或(AF)=1  则    (AL)←(AL)+06H       (AH)←(AH)+1       (AF)←1       (CF)←(AF)       (AL)←

30、AL)∧0FH)  否则  (AL)←((AL)∧0FH)   由上可见,指令将影响AF和CF标志,但状态标志位SF、ZF、PF和OF的状态不确定。   在用AAA指令调整以前,先用指令ADD(多字节加法时用ADC)进行8位数的加法运算,相加结果放在AL中,用AAA指令调整后,非压缩型BCD码结果的低位在AL寄存器,高位在AH寄存器。 3.实验内容: 本实验要求计算X+Y=Z,其中,X、Y、Z为BCD码,其中X=09H,Y=05H。 4。参考程序: ; this example shows the use of aaa instruction (ascii adjust af

31、ter addition). ; it is used to add huge bcd numbers. name ”bcd_aaa" org 100h ; first number ’9': mov ah, 09h ; second number '5': mov al, 05h ; al = al + ah = ; = 09h + 05h = 0eh add al, ah ; clear tens byte of bcd ; result: xor ah, ah ; adjust resu

32、lt to bcd form, ; ah = 1, al = 4 —〉 ’14’ aaa ; print the result: ; store contents of ; ax register: mov dx, ax ; print first digit: mov ah, 0eh ; convert to ascii: or dh, 30h mov al, dh int 10h ; print second digit: ; convert to ascii: or dl, 30h m

33、ov al, dl int 10h ; wait for any key press: mov ah, 0 int 16h ret ; return control to operating system。 5总结思考: (1)xor指令含义; (2)aaa指令的操作过程 实验三 串操作类指令应用程序 1.实验目的 (1) 掌握串操作类指令编程及调试方法。 (2) 掌握串操作类指令对各状态标志位的影响及测试方法。 2.实验原理 (1)在计算机中,大部分数据存放在主存中,8086CPU提供了一组处理主存中连续存放的数据串的指令——串操作指令

34、串操作指令中,源操作数用寄存器SI寻址,默认在数据段DS中;目的操作数用寄存器DI寻址,默认在附加段ES中。每执行一次串操作指令,作为源地址指针的SI和作为目的地址指针的DI将自动修改:+/-1(对于字节串)或+/—2(对于字串)。地址指针时增加还是减少取决于方向标志DF.在系统初始化后或者执行指令CLD指令后,DF=0,此时地址指针增1或2;在执行指令STD后,DF=1,此时地址指针减1或2。 串操作指令寻址方式: 源操作数和目的操作数分别使用寄存器DS:[SI]和ES:[DI]进行间接寻址,源指针DS:[SI]和目的指针ES:[DI]将自动进行修改:±1、±2、±4,其对应的分别是字

35、节操作、字操作和双字操作。 串比较指令: CMPSB;字节串比较:DS:[SI]-ES:[DI],SI←SI+/-1,DI←DI+/—1 CMPSW;字串比较:DS:[SI]—ES:[DI],SI←SI+/—2,DI←DI+/—2比较指令的功能是比较源串与目的串是否相同,并根据其减法结果设置标志位;指令在每次比较后修改SI和DI寄存器的值,使之指向下一个元素。 串扫描指令:  格式1:SCASB          ;字节操作  功能1:AL—(DI)  ,  DI←DI ± 1  格式2:SCASW          ;字操作  功能2:AX—(DI)  ,  DI←DI ±

36、2  重复前缀指令: 任何一个串操作指令,都可以在前面加一个重复前缀,以实现串操作的重复执行,重复次数隐含在CX寄存器中 n REP;REP前缀用在MOVS、STOS、LODS指令前,每次执行一次指令,CX减1;直到CX=0,重复执行结束. n REPZ;也可以表示为REPE,用在CMPS、SCAS指令前,每执行一次串指令CX减1,并判断ZF标志是否为0;只要CX=0或ZF=0,则重复执行结束。 n REPNZ;也可以表达为REPNE,用在CMPS、SCAS指令前,每执行一次串操作指令CX减1,并判断ZF标志是否为1,只要CX=0或ZF=1,则重复执行结束。 REP前缀可以理解为“

37、当数据串没有结束(CX≠0),则继续传送” REPZ/REPE前缀可以理解为“当数据串没有结束(CX≠0),并且串相等(ZF=1)则继续比较" REPNZ/REPNE前缀可以理解为“当数据串没有结束(CX≠0),并且串不相等(ZF=0)则继续比较" (2)$ 是指当前指令的地址 3.实验内容 3.1利用repe cmps指令比较两个字符串是否相等.若相等,显示字符Y,否则显示N。 3.2 利用repne scasb指令在一个字符串中查找一个指定的字符。 4。参考程序: 4。1; how to use cmpsb instruction to compare byte st

38、rings。 name "cmpsb" org 100h ; set forward direction: cld ; load source into ds:si, ; load target into es:di: mov ax, cs mov ds, ax mov es, ax lea si, str1 lea di, str2 ; set counter to string length

39、 mov cx, size ; compare until equal: repe cmpsb jnz not_equal ; ”yes" — equal! mov al, 'y' mov ah, 0eh int 10h jmp exit_here not_equal: ; ”no” - not equal! mov al, 'n’ mov

40、 ah, 0eh int 10h exit_here: ; wait for any key press: mov ah, 0 int 16h ret ; strings must have equal lengths: x1: str1 db 'test string’ str2 db ’test string’ size = ($ — x1) / 2 4.2; this sample shows how to use scasb instruction to find a symbol. org

41、 100h jmp start str1 db 'aaabbbxddd' s_found db '”yes" - found!’, 0Dh,0Ah, ’$' s_not db ’"no" - not found!', 0Dh,0Ah, '$’ find_what equ ’x' start: ; set forward direction: cld ; set counter to string size: mov cx, 10 ; load string address into es:di mov ax,

42、cs mov es, ax lea di, str1 ; we will look for the character in string: mov al, find_what repne scasb jz found not_found: ; "no" - not found! mov dx, offset s_not mov ah, 9 int 21h jmp exit_here found: ; "yes" - found! mov dx, of

43、fset s_found mov ah, 9 int 21h ; wait for any key press。。。 mov ah, 0 int 16h exit_here: ret 5。思考 写出参考程序1和2的流程图 实验四 堆栈指令程序 1.实验目的 (1) 掌握堆栈类指令编程及调试方法。 (2) 掌握堆栈类指令对各状态标志位的影响及测试方法。 2.实验原理 堆栈是存储器中专用的缓冲区,用于暂存寄存器数据或地址指针,push/pop就用于堆栈的操作,这两个指令一般用在: 1.子程序调用,为了保

44、护现场,把所要用的寄存器中的内容先暂时保存起来,在子程序调用结束之前,按照先进后出的原则,把数据恢复. 2.有时候,需要临时用一下某些寄存器,也可用一下,凭个人喜好。 堆栈是一个先进后出的主存区域,位于堆栈段中,使用SS段寄存器记录器段地址。栈只有一个出口,即当前栈顶。栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。堆栈的两种基本操作,对应两条基本指令: (1)进栈指令push 进栈指令先使堆栈指令sp减2,然后把一个字操作数存入堆栈顶部。堆栈操作的对象只能是字操作数,进栈时底字节存放于低地址,高字节存放于高地址,sp相应向低地址移动两个字节单元。 (2)出栈指令pop

45、出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针sp加2.目的操作数应为字操作数,字从栈顶弹出时,低地址字节送低字节,高地址字节送高字节. 注意: l 因为堆栈指针sp总是指向已经存入数据的栈顶(不是空单元),所以PUSH指令是将(SP)减2,后将内容压栈(即先修改SP是指指向空单元,后压入数据),而POP是先从栈顶弹出一个字,后将堆栈指针SP加2。 l 用PUSH指令和POP指令时只能按字访问堆栈,不能按字节访问堆栈。 3。实验内容 通过堆栈指令观察堆栈寄存器内容的变化 4.参考程序: ; this sample shows how the stack works。

46、 ; click ’stack’ button in emulator to see the contents of the stack. ; stack is important element in computer architecture。 ; this code does nothing useful, except printing ”Hi” in the end. name ”stack" org 100h ; create tiny com file。 mov ax, 1234h push ax mov

47、dx, 5678h push dx pop bx pop cx ; function call pushes ip value of the next instruction: call tfunc mov ax, 7890h push ax pop bx ; interrupts are like funtions, ; but in addition they push code segment into the stack mov ax, 3 int 10h ; set s

48、tandart video mode。 ; a typical use of stack is to set segment registers。 ; set ds to video memory segment: mov ax, 0b800h push ax pop ds ; print "hi": mov [170h], 'H' mov [172h], ’i’ ; color attribute for ’h’ mov [171h], 11001110b ; color attribute for 'i’

49、 mov [173h], 10011110b ; wait for any key press.。。. mov ah, 0 int 16h ; here we ”pop” the ip value, ; and return control to the operating system: ret ; the test procedure: tfunc proc xor bx, bx xor cx, cx ; here we ”pop" the ip val

50、ue, ; and return control to the main program: ret endp 5。思考 列出参考程序的堆栈内容变化过程 实验五 求找最大值和最小值程序设计 1。实验目的 (1) 掌握比较类指令编程及调试方法. (2)掌握综合程序的设计及调试 2. 实验原理 微机系统的内存是分段管理的,为了与之相对应,汇编语言源程序也分若干个段来构成.8086CPU有四个段寄存器CS,DS,ED,SS. 2.1段定义   段名 SEGMENT  ,, ;段内的具体内容 ,,  段名 ENDS  例如参考程序的数据段

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服