第3章:微机寻址和指令(编辑修改稿)内容摘要:

PUSH SRC 执行操作: (SP)  (SP) 2 ( (SP)+1, (SP) )  (SRC)  出栈指令: POP DST 执行操作: (DST)  (SP)+1, (SP)) (SP)  (SP) + 2 堆栈: “ 先进后出 ” 的存储区 , 存在于堆栈段中 , SP在任何 时候都指向栈顶。 注意 : * 堆栈操作必须以字为单位。 * 不影响标志位 * 不能用立即寻址方式  PUSH 1234H * DST不能是 CS  POP CS 8086/8088的堆栈 建栈 MOV AX , 1050H MOV SS , AX MOV SP , 000 EH 进栈 PUSH AX (设 AX=1234H) PUSH BX (设 BX=5CF8H) 1050FH 10500H 初始栈顶 (栈底) SP= 0EH SS= 1050H 堆栈起地址 栈的范围 SP= 0EH 12H 34H SP= 0CH 5CH F8H SP= 0AH 10500H (不变) 1050FH SS = 1050H 2 2 当前栈顶 进栈后的 SP和 SS的值 SP=000AH SS=1050H 进栈前 SP和 SS的值 SP=000EH SS=1050H (变化) (AX) (BX) 8086通过赋值 SS和 SP建栈 进栈操作:先 SP减 2,再内容进栈。 高 低 出栈操作:先栈顶内容出栈,再修改SP,使 SP加 2。 (字操作) 出栈 POP CX POP DS SP= 0EH 12H 34H SP= 0CH 5CH F8H SP= 0AH 10500H (不变) 1050FH SS = 1050H 2 2 当前栈顶 出栈前的 SP和 SS的值 SP=000AH SS=1050H (变化) SP= 0EH CX=5CF8H DS=1234H SS=1050H 出栈后 SP和 SS的值 SP=000EH SS=1050H SP=0AH SP=0CH +2 +2 F8H 5CH 34H 12H 1050FH 高 低 例: 假设 (AX) = 2107 H , (AH)=21H,(AL)=07H 执行 PUSH AX ( SP)  低地址 高地址 ( SP)  07H 21H 低地址 高地址 进栈方向 * * * * * * * * PUSH AX 执行前 PUSH AX 执行后 例: POP BX ( SP)  低地址 高地址 ( SP)  07H 21H 低地址 高地址 出栈方向 07H 21H (BX) 2107H,(BH)=21H,(BL)=07H (SP) (SP)+2 POP BX 执行前 POP BX 执行后 * * * * * * * * 例: PUSH DS SUB AX, AX PUSH AX …… …… RET 例: PUSH AX PUSH BX … … POP BX POP AX。 其间用到 AX和 BX寄存器  MOV AX, 4C00H INT 21H   交换指令: XCHG OPR1, OPR2 执行操作: (OPR1)  (OPR2) 注意 : * 不影响标志位 * 不允许使用段寄存器 例: XCHG BX, [BP+SI]。 (BX) (PA) XCHG AL, BH。 (AL) (BH) 63H87HBH BLPA+1PA2. 累加器专用传送指令 ( 只限于使用 AX或 AL)  输入指令 IN ac, PORT。 ( I/O  CPU) 长格式: IN AL, PORT ( 字节 )。 PORT=0~FFH IN AX, PORT ( 字 ) 执行操作: (AL)  (PORT) ( 字节 ) (AX)  (PORT+1, PORT)( 字 ) (AH)  (PORT+1), (AL)  (PORT) 短格式: IN AL, DX (字节)。 PORTFFH IN AX, DX (字) 执行操作: (AL)  ( (DX) ) (字节) (AX)  ( (DX)+1, (DX) )(字) 输出指令 OUT PORT, ac。 ( CPU  I/O) 长格式: OUT PORT, AL (字节)。 PORT=0~FFH OUT PORT, AX (字) 执行操作: (PORT)  (AL) (字节) (PORT+1, PORT)  (AX)(字) (PORT+1)  (AH), (PORT)  (AL) 短格式: OUT DX, AL (字节)。 PORTFFH OUT DX, AX (字) 执行操作: ( (DX) )  (AL) (字节) ( (DX)+1, (DX) )  (AX)(字) 注意 : * 不影响标志位 * 前 256个端口号 00H~FFH可直接在指令中指定(长格式) * 如果 端口号  256, 端口号  DX(短格式) * 只限于使用累加器传送信息 例: IN AX, 28H。 MOV DX, 28H。 IN AX, DX MOV DATA_WORD, AX 例: MOV DX, 3FCH 例: OUT 5, AL OUT DX, AL 例 : 测试某状态寄存器(端口号 27H)的第 2位是否为 1 IN AL, 27H TEST AL, 00000100B JNZ ERROR。 若 第 2位为 1,转到 ERROR处理 mov dx, 100 in al, 61h and al, 11111100b sound: xor al,00000010b out 61h, al mov cx, 140h wait1: loop wait1 ; 140h决定脉冲的宽度 dec dx ; dx=100D决定脉冲的个数, jnz sound ;即 50个高电平, 50个低电平。 例 . Sound程序 设备控制寄存器 端口 61H 1 / 0 0 控制其它外部设备 与门 放大器 2号定时器门控 1 0 换码指令: XLAT 或 XLAT OPR 执行操作: (AL)  (DS*16+ (BX) + (AL) ) 例: MOV BX, OFFSET TABLE。 (BX)=0040H MOV AL, 3 XLAT TABLE 指令执行后 (AL)=33H 注意 : * 不影响标志位 * 字节表格 (长度不超过 256) 首地址  (BX) * 需转换代码  (AL) (BX)  30 H F0040 31 H F0041 (AL) = 3 32 H F0042 33 H F0043 TABLE (DS)=F000H 3. 地址传送指令 有效地址送寄存器指令: LEA REG, SRC 执行操作: (REG)  SRC  指针送寄存器和 DS指令: LDS REG, SRC 执行操作: (REG)  (SRC) (DS)  (SRC+2) 4个相继字节  寄存器 ( 通常是 SI) 和 DS  指针送寄存器和 ES指令: LES REG, SRC 执 行操作: (REG)  (SRC) (ES)  (SRC+2) 4个相继字节  寄存器(通常是 DI)和 ES (DS): 1000H 40 H 00 H 00 H 30 H TABLE MOV BX, TABLE。 (BX)=0040H MOV BX, OFFSET TABLE。 (BX)=1000H LEA BX, TABLE。 (BX)=1000H LDS BX, TABLE。 (BX)=0040H。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。