- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
调用子程序(或过程)或发生中断时要保护断点的地址, 子程序或中断返回时恢复断点。 子程序嵌套 断点地址压入和弹出情况 (2) 堆栈操作指令 (堆栈操作指令有两条): ? 入栈指令 格式:PUSH src ; (SP) ? (SP)-2 ((SP)+1,(SP)) ? (src) 把一个字从源操作数?由SP指向堆栈顶部。 操作如:PUSH AX ? 出栈指令 格式:POP dest ; (dest) ? ((SP)+1,(SP)) (SP) ? (SP)+2 把现行SP所指向堆栈顶部的一个字 ? 指定的目的操作数,同时进行修改堆栈指针的操作。 操作如: POP BX 应用时注意: 堆栈操作都按字操作。 PUSH , POP 指令的操作数可能有三种: 寄存器(通用寄存器,地址指针,变址寄存器), 段寄存器(CS除外,PUSH CS 合法,POP CS 非法), 存储器。 执行PUSH 指令, (SP)-2 ? (SP), 低字节放在低地址,高字节放在高地址。 随着推入堆栈内容增加,堆栈就扩展,SP的值减少, 但SP总是指向栈顶, 堆栈工作原则后进先出。 PUSH ,POP指令应该成对使用,保持堆栈原有状态。 堆栈最大容量即为SP的初值与SS之间的差。 堆栈应用举例: 例:用BP的基址指令 代替POP指令 … MOV BP,SP PUSH AX PUSH BX PUSH CX … MOV CX,[BP-6] MOV BX,[BP-4] MOV AX,[BP-2] … ADD SP, 6 例 : 压入堆栈的内容 与弹出内容顺序相反 … PUSH AX PUSH BX PUSH CX … POP CX POP BX POP AX 3、交换指令(Exchange) 格式:XCHG dest , src ;(dest) ?(src) 执行操作: 把一个字节或一个字的源操作数与目的操作数相交换。 可以 实现: 寄存器之间 寄存器和存储器之间 注意: 存储器之间不能交换,两个操作数中必须有一个在寄存器中; 段寄存器不能作为一个操作数; 允许字或字节操作,不影响标志位。 应用举例: XCHG BL,DL XCHG AX,SI XCHG COUNT[DI], AX XCHG [BX],[DI] (错) XCHG DS, AX (错) XLAT(Trans late)换码指令:该指令不影响标志位。 格式: XLAT str_table ;(AL)←((BX )+(AL)) 或 XLAT str_table——表格符号地址(首地址), 只是为了提高可读性而设置,汇编时仍用BX。 XLAT指令使用方法: 先建立一个字节表格; 表格首偏移地址存入BX; 需要转换代码的序号(相对与表格首地址位移量)存入AL; (表中第一个元素的序号为0) 执行XLAT指令后,表中指定序号的元素存于AL中。 (AL)为转换的代码。 XLAT指令应用: 若把字符的扫描码转换成ASCII码; 或数字0~9转换成7段数码所需要的相应代码(字形码)等就要用XLAT指令。 例:内存的数据段中有一张十六进制数字的ASCII码表。 首地址为:Hex_table ,欲查出表中第10个元素(‘A’) 执行指令序列: MOV BX,OFFSET Hex_table MOV AL,0AH XLAT Hex_table 假设: (DS)=F000H, Hex_table=0040H (AL)=0AH 执行XLAT以后: (AL)=41H=(F004AH), 即“A”的ASCII码。 30H 31H 32H ... 39H 41H 42H ... 46H ... Hex_table Hex_table+1 Hex_table+2 Hex_table+0AH Hex_table+0BH Hex_table+0FH F B A 9 1 2 0 16进制数的ASCII码表 (二)输入输出指令(Input and Output) 输入输出指令共两条:
文档评论(0)