实验调试汇编语言程序.docVIP

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二 调试汇编语言程序 一:实验目的: 继续利用emu8086调试汇编语言程序,熟悉8088/8086指令及编程方法。 二:实验内容: 利用emu8086,调试教材上的例6.1、例6.3及子程序调用程序 例6.1 两个16位数的加法运算, 被加数存放在 10050H、10051H内存中 加数存放在 10052H、10053H内存中 和存放在 10054H、10055H内存中 MOV AX,1000H MOV DS,AX ;数据段DS=1000H MOV SI, 50H ;被加数指针SI=50H MOV DI,52H ;加数指针DI=52H MOV BX,54H ;和的指针BX=54H CLC ;清CF XOR AX,AX ;清AX MOV AX,[SI] ;取一个字到AX ADC AX,[DI] ;AX(AX+[DI]+CF MOV [BX],AX ;存一个字到 [BX] HLT 例6.3 将AX和BX两个无符号数之差的绝对值存入当前数据段的2800H、2801H内存中 CLC ;清除CF CMP AX,BX ; AX-BX JC AA ;CF=1转AA去执行(即AXBX时转移) SUB AX,BX ;AX(AX-BX MOV DI,2800H ;结果指针DI=2800H MOV [DI],AX ;结果送到2800H和2801H单元 JMP STOP ;暂停 AA: SUB BX,AX ;BX(BX-AX MOV DI,2800H MOV [DI],BX STOP: HLT 子程序调用程序 从10050H到10059H存放了10个单字节带符号数,找出最大值,存入1005AH单元中. START: MOV AX,1000H ;数据段基址赋予1000H MOV DS,AX MOV CX,0AH ;循环10次 MOV SI,50H ;置数据指针 MOV AL,80H ;先置AL为可能最小的值 AGAIN: CALL CMP0 ;调用比较大小的子程序 INC SI ;修改指针 LOOP AGAIN ;再与下一个数比较 MOV [SI],AL ;将最大值保存在最后一个单元 HLT ;结束 CMP0: PUSHF ;子程序,比较AL与内存数据大小 PUSH BX ;保护现场 MOV BL,[SI] ;取内存数据 CMP AL,BL ;将AL与之比较 JG BACK ;若ALBL,子程序返回 MOV AL,BL ;否则,用BL替换AL POP BX ;恢复现场 POPF RET ;返回 三.实验要求: 1.例6.1 实验,要求运算 178FH+569AH=? 输入程序后进入仿真,在内存相应单元中存放被加数、加数。 用单步命令执行程序,记下每一步执行后的目的操作数内容(如果该目的操作数是内存寻址,还必须写出该操作数的内存地址)。 2.例6.3 实验,要求程序执行两次 第一次:设定(AX)=12H, (BX)=34H; 第二次:设定(AX)=34H, (BX)=12H。 调试过程同步骤1。 3.子程序调用程序 要求设置10个数分别为 01H,02H,03H, FEH, 7AH, 56H, D2H , 89H, 5CH, B0H. 调试步骤: 用单步命令逐条执行程序,在执行到CALL命令前时,记录堆栈段基址SS寄存器及堆栈指针SP的值。 用单步命令单步执行CALL指令,进入到子程序,观察SS、SP值的变化。找到堆栈段所在内存区域,找出CALL命令所压入堆栈的内容,思考该内容的意义。 继续用单步命令单步执行子程序指令,在执行到PUSHF 、PUSH BX及POP BX 、POPF指令时观察SS、SP值的变化。找出PUSH命令所压入堆栈的内容,思考该内容的意义。 用单步命令单步执行RET指令,退出子程序,观察SS、SP值的变化。观察返回地址与堆栈内容的关系。 堆栈指针的变化及堆栈内容的变化只要在第一次进入子程序是观察即可。在后续的子程序调用时无需反复再次观察。 下面给出一个某单步运行后记录堆栈内容的实例,供实验记录时参考: 调用CALL后,(SP)=0FFEH( 7DH (堆栈内容 BAH 调用CALL前,(SP)=1000H( 1FH 4. 编写程序 设10050H到10059H存放了10个数,分别为01H,02H,03H, FEH, 7AH, 56H, D2H , 89H, 5CH, B0H. 统计这10个数中偶数的个数,结果存放在BL寄存器中。

文档评论(0)

phl805 + 关注
实名认证
文档贡献者

建筑从业资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年05月12日上传了建筑从业资格证

1亿VIP精品文档

相关文档