- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 采用示意图说明下列变量在内存单元的分配及数据预置。 DATA SEGMENT VAR1 DW 9 VAR2 DW 2 DUP(0) CONT EQU 2 VAR3 DB CONT DUP(?,8) VAR4 DB 2 DUP(?, CONT DUP(0), ‘AB’) DATA ENDS 练习 * 已知3个变量的数据定义如下所示,分析以下指令是否正确。 DATA SEGMENT VAR1 DB ? VAR2 DB 10 VAR3 EQU 100 DATA ENDS MOV VAR1,AX MOV VAR3,AX MOV BX,VAR1 MOV [BX],10 CMP VAR1,VAR2 VAR3 EQU 20 练习 * 假设程序中数据定义如下: LNAME DB 30 DUP(?) ADDRESS DB 30 DUP(?) CITY DW 15 DUP(?) CODE-LIST DB 1,8,4,3,5 (1)用一条MOV指令将LNAME的偏移地址放入AX (2)用一条指令将CODE-LIST的前两个字节内容放入SI (3)用一条伪指令使CITY-LENGTH的值等于CITY域的实 际长度(字节数) 练习 * 已知数据段DATA从存储器物理地址02000H开始,作如下定义: DATA SEGMENT VAR1 DB 2 DUP(0,1,?) VAR2 DW 50 DUP(?) VAR3 DB 10 DUP(0,1,2 DUP(4),5) DATA ENDS 求3个变量经SEG、OFFSET、TYPE、LENGTH和SIZE运算的结果。 练习 * 立即数寻址 * 寄存器寻址 * 直接寻址 * 寄存器间接寻址 * 寄存器相对寻址 基址变址寻址 相对基址变址寻址 * 见程序举例:程序规模小时段寄存器分配情况 * 3. 扩展的堆栈指令 80386开始的微处理器增设了32b的堆栈指令。 PUSH REG32/MEM32 ;32位寄存器、存储器操作数压入堆栈 POP REG32/MEM32 ;从堆栈弹出32位,送入目的操作数 PUSH IMM ;16/32位立即数压入堆栈 例1: PUSH EAX PUSH DWORD PTR[DI] POP ECX POP DWORD PTR[SI] PUSH 0A123H * PUSHAD ;把8个32位通用寄存器顺序压栈 POPAD ;从堆栈中弹出8个32b数据顺序存入通用寄存器 80386增加了8个32位通用寄存器的入、出栈指令,顺序同上。 80286微处理器增加了在一条指令中把8个通用寄存器压入、 弹出堆栈的指令,压入的顺序是:AX、CX、DX、BX、 SP、BP、SI、DI。 注意: 这里的SP代表指令执行之前的值。弹出的顺序相反。 PUSHA ;把8个16位通用寄存器顺序压栈 POPA ;从堆栈中弹出8个16b数据,顺序存入通用寄存器 上述指令执行都不影响标志位。 * 80386开始新增加了压入、弹出32位EFLAGS寄存器指令. PUSHFD ;把32位EFLAGS寄存器内容压入堆栈,原寄存器内容不变 POPFD ;从堆栈中弹出32b,存入EFLAGS,寄存器内容被更新 * 2.2.6 操作数表达式 指令中的操作数可以是一个表达式,这个表达式的值在汇编成目标代码的时候进行计算。 例:设变量X的偏移地址为1020H MOV AL, X+5 MOV AL, [1025H] * 汇编时,对EQU定义的符号名用对应的表达式进行“替换”。 1.符号定义伪指令 符号名 EQU 表达式 NUM EQU 215 MOD 15 ERR_MSG EQU “Data Override ” MESSAGE DB ERR_MSG MOV CX, NUM+1 例1,有以下定义: ;等价于MESSAGE DB “Data Override ” ;等价于MOV CX, 215 MOD 15+1 用EQU定义的符号名不允许重复定义。 * POINTER EQU BUFFER[DI] WT EQU WORD PTR MOV BX, POINTER MOV WT POINTER, 0 举例2,有以下定义: ;等价于MOV BX, BUFFER[DI] ;等价于MOV WORD
文档评论(0)