035.多个双字的移位操作

本文深入探讨了8086处理器上使用SHR和RCR指令进行多字节移位操作的过程,通过具体示例展示了如何在连续字节中实现循环移位,特别关注了小端处理器的字节分布特性。
书中这一部分给出的图是结果是有错误的,移位后,正确的结果是从 1001 1001 1001 1001 编程 0100 1100 1100 1100 1100,请注意这里使用的
移位结果产生的过程如下

1001 1001 1001 1001 1001 1001
0100 1100 1001 1001 1001 1001
0100 1100 0100 1100 1001 1001
0100 1100 0100 1100 0100 1100

;Multiple Doubleword Shift            (MultiShf.asm)

;This program demonstrates a multibyte shift operation, 
;using SHR and RCR instructions.

INCLUDE Irvine32.inc

.data
	ArraySize = 3
	array BYTE ArraySize DUP(99h)		; 1001 pattern in each nybble ;nybble n.半字节
										; 十六进制下的99h就是模式为 1001 1001 的二进制数字

.code
	main PROC
		call DisplayArray			; display the array
	
		mov esi,0					; 循环移位的操作是从右向左进行的首先对最左边的一个字节进行携带符号位的移位,其次按顺序对左侧相邻的两个字节进行循环进位的移位操作。
									;8086处理器是小端处理器,应该特别注意连续字节在内存中的分布
		shr array[esi+2],1     		; high byte   
		rcr array[esi+1],1     		; middle byte, include Carry flag
		rcr array[esi],1     		; low byte, include Carry flag

		call DisplayArray			; display the array
		call WaitMsg				;
		exit
	main ENDP

	;----------------------------------------------------
	DisplayArray PROC
	; Display the bytes from highest to lowest
	;----------------------------------------------------
		pushad

		mov ecx,ArraySize
		mov esi,ArraySize-1
	L1:
			mov  al,array[esi]		; AL存放需要显示的字符ASCII码
			mov  ebx,1				; ebx表示字节为以单位显示的大小,这里是用了一个字节
			call WriteBinB			; display binary bits 使用字节格式显示一个二进制整数,接收参数al,ebx,al表示二进制比特数值,ebx标志输出类型
			
			mov  al,' '				;WriteChar使用AL寄存器来传递字符,用于显示在屏幕上
			call WriteChar
			sub  esi,1				;从后向前显示字符,偏移量减少
		Loop L1
	
		call Crlf
		popad
		ret
	DisplayArray ENDP

END main
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值