第二章80x86汇编语言程序设计内容摘要:
2H +1 +2 +3 +4 +5 TABLE 45H 44H AL 44H 41H 40H 36 地址传送指令 LEA (load effective address) 有效地址送寄存器 LDS (load DS with pointer) 地址指针送寄存器和 DS LES (load ES with pointer) 地址 指针送寄存器和 ES LFS (load FS with pointer) 地址 指针送寄存器和 FS LGS (load GS with pointer) 地址 指针送寄存器和 GS LSS (load SS with pointer) 地址 指针送寄存器和 SS LFS、 LGS、 LSS非 8086指令。 37 ( 1) LEA 取有效地址指令 格式: LEA DST, SRC 操作 : DST←SRC 的有效地址 EA 说明: 1) SRC必须是存储器操作数 2) DST必须是 16位或 32位通用寄存器 3)该指令不影响任何状态标志位 示例 1: LEA SI,[BX] 设 (DS)=2020H,(BX)=1234H 执行后 21234H 21235H 41H 40H 1234H SI 1234H BX 示例 2: LEA DI,BUFF ;将 BUFF的有效 ;地址送 DI,而 ;非将 BUFF的值 ;送 DI 38 ( 2) LDS 装载数据段地址指针指令 格式: LDS DST,SRC 操作 : DST←(SRC) 或 DST←(SRC+2,SRC) DS←(SRC+2) DS←(SRC+4) 说明: 1) SRC必须是存储器操作数 2) DST必须是 16位或 32位通用寄存器 3)该指令不影响任何状态标志位 LES、 LFS、 LGS、 LSS指令: 格式 同 LDS,仅操作助记符不同 操作 — 同 LDS,仅目标段寄存器不同 39 LDS指令示例 1: LDS DI,[BX] 设 (DS)=2020H,(BX)=1000H 21000H 21001H 21002H 21003H 41H 40H 1234H DI 2020H DS 执行前 43H 42H 4140H DI 4342H DS 执行后 LDS指令示例 2: LEA SI,BUFF (与 LEA比较 ) LDS DI,BUFF 设 (DS)=2020H,EABUFF=1000H 21000H 21001H 21002H 21003H 41H 40H 43H 42H 执行后 (SI)=1000H (DI)=4140H, (DS)=4342H 40 标记传送指令 LAHF(load AH with flags) 取标志到 AH SAHF(store AH into flags) 从 AH存标志 PUSHF/PUSHFD(push the flags or eflags) 标志进栈 POPF/POPFD(pop the flags or eflags) 标志出栈 PUSHFD、 POPFD非 8086指令。 41 ( 2) SAHF 存 FLAG标志寄存器指令 格式: SAHF 操作: FLAG7~0←(AH) 将 AH的内容存到 FLAG标志寄存器的低 8位中。 说明: 该指令改变 SF、 ZF、 AF、 PF、 CF标志。 ( 1) LAHF 取 FLAG标志寄存器指令 格式: LAHF 操作: AH←(FLAG) 7~0 将 FLAG标志寄存器的低 8位送到 AH中。 说明: 该指令不影响标志状态位。 42 ( 4) POPF/POPFD FLAG标志寄存器出栈指令 格式: POPF和 POPFD 操作: FLAG←((SP)+1,(SP)) SP←(SP)+2 和 EFLAG←((ESP)+3,(ESP)+2,(ESP)+1,(ESP)) ESP←(ESP)+4 ( 3) PUSHF/PUSHFD FLAG标志寄存器进栈指令 格式: PUSHF和 PUSHFD 操作: SP←(SP) 2 ((SP)+1,(SP))←(FLAG) 和 ESP←(ESP) 4 ((ESP)+3,(ESP)+2,(ESP)+1,(ESP)) ←(EFLAG) AND 0FCFFFFH 43 输入输出指令 IN(input) 从 I/O接口空间读数据 OUT(output) 向 I/O接口空间写数据 I/O接口空间大小: 16根地址线、每个地址对应 1个 8位空间; 即 64K个 8位空间 =32K个 16位空间 =16K个 32位空间。 I/O接口空间内数据的传输方式: 支持 8位、 16位、 32位数据传输; 16位和 32位传输时,地址需按整数边界对齐。 8086不支持 32位数据传输。 44 I/O空间的寻址方式: 只支持直接寻址、 (寄存器 )间接寻址两种。 说明 — ① 直接寻址只支持 8位的地址 (高 8位为 0); ② (寄存器 )间接寻址只能使用 DX寄存器 (16位 ); ③寻址方式格式与存储器操作数的格式不同。 存储器操作数 I/O操作数 直接寻址 [2020H] 20H (寄存器 )间接寻址 [DX] DX 回下页 回 46页 回 I/O接口技术 45 ( 1) IN 从 I/O接口输入数据指令 格式: IN AL, n IN AX, n 直接寻址 , n是地址常量 IN EAX, n IN AL, DX IN AX, DX (寄存器 )间接寻址 IN EAX, DX 操作: AL←(n) 或 (DX) AX←(n+1,n) 或 ((DX)+1,(DX)) EAX←(n+3,„,n) 或 ((DX)+3,„,(DX)) 说明: ①目的操作数只能是 AL/AX/EAX寄存器; ②源操作数要求参见寻址方式说明 (上页 ); ③读入数据长度取决于目的寄存器的位数。 转上页 46 ( 2) OUT 向 I/O接口输出数据指令 格式: OUT n, AL OUT n, AX 直接寻址 , n是地址常量 OUT n, EAX OUT DX, AL OUT DX, AX (寄存器 )间接寻址 OUT DX, EAX 操作: n或 (DX)←(AL) (n+1,n)或 ((DX)+1,(DX))←(AX) (n+3,„,n) 或 ((DX)+3,„,(DX))←(EAX) 说明: ①源操作数只能是 AL/AX/EAX寄存器; ②目的操作数要求参见寻址方式说明; ③写出数据长度取决于源寄存器的位数。 转 44页 47 IN指令示例: IN AL, 20H ;从 20H端口读入字节数据 → AL IN AX, 48H ;从 48H端口读入字数据 → AX MOV DX, 3FCH IN EAX, DX ;从 03FCH端口读入双字数据 → EAX OUT指令示例: OUT 32H, AX ; 传送 字数据到 32H端口 MOV DX, 400H MOV AL, 86H OUT DX, AL ;传送字节数据到 DX指定的端口 OUT DX, 86H ;不合法,立即数可扩展 (8/16?) 48 类型转换指令 CBW(convert byte to word) 字节转换为字 CWD/CWDE(convert word to double word) 字转换为双字 CDQ(convert double to quad) 双字转换为 4字 BSWAP(byte swap) 字节交换 CWDE、 CDQ、 BSWAP非 8086指令。 ( 1) CBW 字节转换为字指令 格式: CBW 操作: 扩展 AL中符号位至 AH中, 将 8位数扩展成等效的 16位数。 49 ( 2) CWD/CWDE 字转换为双字指令 格式: CWD 操作: 扩展 AX中符号位至 DX中,形成等效的 32位数。 格式: CWDE 操作: 扩展 AX中符号位至 EAX中 ,形成等效的 32位数。 说明: 用于有符号数相除前,形成双倍长度被除数。 ( 3) CDQ 双字转换为 4字指令 格式: CDQ 操作: 扩展 EAX中符号位至 EDX中,形成 EDX:EAX形式的 4字数据。 50 数据传送指令小结 数据传送指令不影响标志位 (除 SAHF、 POPF) 除 XCHG指令外,都是从源到目的的单向传送 注意 MOV指令与 LEA指令的区别 MOV传送的是地址对应的内容, LEA传送的是 EA 80286后才允许 PUSH指令使用立即数寻址方式 与存储器操作数有关的寄存器问题 MEM操作数的寻址方式中只能用基址、变址寄存器 段寄存器问题 只能在 MOV、 PUSH、 POP等指令中作为操作数出现, CS寄存器比其他段寄存器有更多限制。 最常用指令: MOV、 IN/OUT、 LEA、 PUSH/POP、 XCHG、 CBW 51 二、算术运算类指令 包含加法、减法、乘法、除法、十进制调整运算 5种子类型指令。 算术运算指令可对 4种类型操作数运算: ⑴无符号二进数 ⑵有符号二进数 ⑶非压缩十进数 一个字节存放一位十进数的 BCD码,高 4位为零。 ⑷压缩十进数 一个字节存放两位十进数的 BCD码。 52 0、算术运算中的相关标志及处理 ( 1) 8086标志寄存器 FLAG的标志位 OF DF IF TF SF ZF AF PF CF D15 D11 D10 D9 D8 D7 D6 D4 D2 D0 符号 名称 值为‘ 1’的条件 CF 进位标志 加 /减法时产生进位 /借位 OF 溢出标志 运算结果超出有符号整数能表示的范围 ZF 零标志 运算结果为 0时 SF 符号标志 运算结果的最高位为“ 1” 时 AF 辅助进位标志 运算时半字节( b3)产生进位 /借位 PF 奇偶标志 操作结果低 8位为” 1” 的位数为偶数时 DF 方向标志 串操作中地址指针向低地址方向移动 IF 中断允许标志 允许 CPU响应可屏蔽中断请求时 TF 跟踪标志 CPU处于单步执行的工作方式 回下页 回 103页 53 ( 2)算术运算与 FLAG中标志位的关系 FLAG标志位的补充说明: ① CF的含义是无符号数运算的溢出标志 (CF=Cn); ② ZF表示运算结果是否为零 (含最高位 ),即无符号数运算结果是否为零。 8086运算器 ALU对加、减法运算的处理方式: ALU按 无符号数 进行运算,求得结果,设置 CF、 ZF、AF和 PF; ALU按 有符号数 方式设置 SF和 OF(OF=Cn1 + Cn)。 说明: Cn和 Cn1分别为最高位和次高位进位信号,见组成原理 P51。 8086运算器 ALU对乘、除法运算的处理方式: 通过有 /无符。第二章80x86汇编语言程序设计
相关推荐
挤压出现在大沟中;对于嘧啶 ( 3ˊ 5ˊ ) 嘌呤序列,来自鸟嘌呤 N3, N2 腺嘌呤 N3间的挤压在小沟中发生(图 219)。 可见小沟中的挤压更为严重。 为减少不利的挤压,使碱基堆积更加有利,双螺旋结构就要做出局部调整,如改变各个结构参数等,甚至形成交叉氢键,这些变化就形成了 DNA的精细结构( fine structure)。
线正式开通,这条专线是中国部分连入 Inter的第一根专线 *资料来源:中国互联网络信息中心( CNNIC) 25 Inter在中国的发展及现状 中国互联网发展大事记 * 1994年 4月 20日, NCFC工程通过美国 Sprint公司连入 Inter的 64K国际专线开通,实现了与 Inter的全功能连接,从此中国被国际上正式承认为真正拥有全功能 Inter的国家 1994年
把数学表达式中的有些符号 , 改成 VISUAL FOXPRO中可以表示的符号。 例如:要把 2πr改为 2*pi()*r。 (pi()为函数 ) 由字符运算符将字符型数据连接起来的式子。 “ +” :完全连接运算符。 “ ” :不完全连接运算符。 运算符 功 能 表达式举例 运算结果 + 串 1+串 2:两串顺序相连接 ‘ 12 ’ +’ 56’ ‘ 12 56’ _ 串 1串 2:串
为 ——顺应自然 《 云笈七签 》 则告诉我们:“欲求无为,先当避害。 何者。 远嫌疑,远小人,远苟得,远行止;慎口食,慎舌利,慎处闹, 慎力斗;常思过,改而从善 ……是则与圣齐功,与天同德矣。 ”而内丹家则以金丹术为“无为”, 《 道枢 》 引 《 太丹篇 》说:“无为之道莫过乎金丹。 ” 寡欲 ——见素抱朴 “少私寡欲,见素抱朴”( 《 道德经 》 ) “祸莫大于不知足,咎莫大于欲得”( 《