- 19
- 0
- 约5.22千字
- 约 25页
- 2017-07-29 发布于浙江
- 举报
微机原理-第三章-8
微机原理与接口技术--基于IA-32处理器和32位汇编语言·第4版 第2章 处理器结构 3.6.2 移位指令 非循环移位 逻辑左移指令 SHL 逻辑右移指令 SHR 算术左移指令 SAL 算术左移指令 SAR 1. 非循环移位指令 分逻辑(Logical)和算术(Arithmetic)移位 具有左移(Left)或右移(Right)操作 SHL reg/mem,i8/CL ;逻辑左移:最低位补0,最高位进入CF SHR reg/mem,i8/CL ;逻辑右移:最高位补0,最低位进入CF SAL reg/mem,i8/CL ;算术左移,等同于SHL SAR reg/mem,i8/CL ;算术右移:最高位不变,最低位进入CF 目的操作数:寄存器或存储单元reg/mem 移位位数i8/CL 移位指令的功能和示例 〔例3-14〕移位指令实现乘法程序 xor eax,eax ; EAX=0 mov ax,wvar ; AX=要乘以10的无符号数 shl eax,1 ; 左移一位等于乘2 mov ebx,eax ; EBX=EAX×2 shl eax,2 ; 再左移2位,EAX=EAX×8 add eax,ebx ; EAX=EAX×10 call dispuid ; 显示乘积 call dispcrlf ; 换行 imul eax,10 ; EAX=EAX×10 call dispuid ; 显示乘积 2. 循环移位指令 循环:将从一端移出的位返回到另一端 包括不带进位循环移位和带进位循环移位 ROL reg/mem,i8/CL ; 进位不参与循环 ROR reg/mem,i8/CL ;进位不参与循环 RCL reg/mem,i8/CL ;进位参与循环 RCR reg/mem,i8/CL ;进位参与循环 不带进位的循环移位指令 带进位的循环移位指令 〔例3-15〕循环移位程序-1 ;数据段 qvar qword 1234567887654321h ;代码段 mov ecx,4 again: shr dword ptr qvar+4,1 rcr dword ptr qvar,1 loop again 〔例3-15〕循环移位程序-2 ;数据段 ascii byte 38 bcd byte ? ;代码段 mov al,ascii and al,0fh mov ah,ascii+1 shl ah,4 or al,ah mov bcd,al 3.7 串操作类指令 数据串(数组):以字节、字和双字为单位的多个数据存放在连续的主存区域中 源操作数:允许段超越:DS:[ESI] 目的操作数:不允许段超越:ES:[EDI] 每执行一次串操作:ESI和EDI自动±1/2/4 以字节为单位(用B结尾)操作:地址指针±1 以字为单位(用W结尾)操作:地址指针±2 以双字为单位(用D结尾)操作:地址指针±4 DF=0(执行CLD指令):地址指针增加(+) DF=1(执行STD指令):地址指针减小(-) 3.7.1 串传送指令 MOVS STOS LODS MOVSB|MOVSW|MOVSD ;串传送:ES:[EDI]←DS:[ESI] ;然后:ESI←ESI±1/2/4,EDI←EDI±1/2/4 STOSB|STOSW|STOSD ;串存储:ES:[EDI]←AL/AX/EAX ;然后:EDI←EDI±1/2/4 LODSB|LODSW|LODSD ;串读取:AL/AX/EAX←DS:[ESI] ;然后:ESI←ESI±1/2/4 REP ;执行一次串指令,ECX减1;直到ECX=0 〔例3-16〕字符串复制程序-1 ; 数据段 srcmsg byte\ In a major matter, no details are small.,0 destmsg byte (lengthof srcmsg) dup (0) ; 代码段 mov esi,offset srcmsg ; ESI=源字符串地址 mov edi,offset destmsg ; ESI=源字符串地址 mov ecx,lengthof srcmsg ; ECX=字符串长度 cld ; 地址增量传送 rep movsb ; 重复字符串传送 mov eax,offset destmsg call dispmsg 〔例3-16〕字符串复制程序-2 ; 数据段 srcmsg byte\ In a major matter, no details are small.,0 destmsg byte (lengthof srcmsg) dup (0) ; 代码段 xor ebx,ebx ; EBX=0 mov
原创力文档

文档评论(0)