将DX、AX作为整体,逻辑左移一位的具体操作,用汇编语言编写,写具体些最好。 求汇编语言编程 把32位逻数 3F65C9232H 逻辑左移...
\u7f16\u5199\u5c3d\u53ef\u80fd\u77ed\u7684\u7a0b\u5e8f\u5b8c\u6210\u4e0b\u8ff0\u529f\u80fd\uff1a\u5c06DX\u3001AX\u4e2d\u768432\u4f4d\u6570\u636e\u5de6\u79fb\u4e00\u4f4d\uff0c\u4f4e\u4f4d\u8865\u96f6\u4e86\u3002
\u5de6\u79fb\u4e00\u4f4d\uff0c\u4e58\u4ee52\u5373\u53ef\uff0c\u4e0b\u5217\u7a0b\u5e8f\u6700\u5bb9\u6613\u7406\u89e3\u548c\u8bb0\u5fc6\uff1a
ADD AX, AX
ADC DX, DX
\u5b8c\u3002
\u8fd9\u4e2a\u662f36\u4f4d\u554a\uff0c\u6309\u524d32\u4f4d\u4e3a\u4f8b\u3002
; \u672c\u7a0b\u5e8f\u901a\u8fc7\u7f16\u8bd1\uff0c\u8fd0\u884c\u6b63\u786e
Code Segment
Assume CS:Code,DS:Code,ES:Code
; \u628a32\u4f4d\u903b\u6570 3F65C9232H \u903b\u8f91\u5de6\u79fb2\u4f4d \u7ed3\u679c\u5b58\u5728DX\uff1bAX\u4e2d
Start: mov dx,3F65h
mov ax,C923h
shl ax,1
rcl dx,1
shl ax,1
rcl dx,1
Exit_Proc: mov ah,4ch ;\u7ed3\u675f\u7a0b\u5e8f
int 21h
Code ENDS
END Start ;\u7f16\u8bd1\u5230\u6b64\u7ed3\u675f
rcl dx,1 ;将dx带进位循环左移一位,将CF(存放的是刚才ax的最高位)移到dx最低位上,同时dx所有位左移1位,dx最高位移到CF中。
rcl是把操作数的最高位移入CF,而CF中原有内容移入操作数的最低位
逻辑左移=算数左移,右边统一添0
逻辑右移,左边统一添0
算数右移,左边添加的数和符号有关
e.g:1010101010,其中[]位是添加的数字
逻辑左移一位:010101010[0]
算数左移一位:010101010[0]
逻辑右移一位:[0]101010101
算数右移一位:[1]101010101
所以对于双字就是
SHL AX,1最高位移入CF
RCL DX,1带进位逻辑左移CF移入DX最低位
Code Segment
Assume CS:Code,DS:Code,ES:Code
; 把32位逻数 3F65C9232H 逻辑左移2位 结果存在DX;AX中
Start: mov dx,3F65h
mov ax,C923h
shl ax,1
rcl dx,1
mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
假定dx中存放高位数据,ax中存放低位数据。
shl dx ,1
push ax ;保存ax ,以方便 对其进行处理
and ax,10000000B ;ax中仅保留最高位
shr,ax,7;把得到的最高位数据存放到最低位去
add dx,ax ;存放到dx中去
pop ax
shl ax,1 ;ax左移一位,整体左移一位结束!
中间可能描述得不是很清晰,如果有疑问,请继续提问!
左移一位,如果还想要使用逻辑移位指令,那就太难点了。
左移一位,乘以2即可,下列程序最容易理解和记忆:
ADD AX, AX
ADC DX, DX
完。
shl ax,1
shl dx,1
绛旓細5銆佸皢CX鐨勬渶楂樹綅娓0.xor ch,ch;寮傛垨杩愮畻 6銆佸皢CX鐨勬渶浣3浣嶇疆1.xor cl,03h 7銆佸皢CX鐨勭13銆14浣嶅彇鍙嶃傦紙鏈浣庝綅涓虹0浣嶏級xor ch,30h 8銆佸皢AX閫昏緫宸︾Щ2浣嶃俶ov cl,2 shl ax,cl 9銆佸皢BX绠楁湳鍙崇Щ1浣嶃俿ar bx,1 10銆佸皢BX寰幆宸︾Щ3浣嶃俶ov cl,3 rcl bx,cl 瀛︾殑閮藉繕浜嗭紝宸笉...
绛旓細DATAS SEGMENT BUFA EQU THIS WORD BUF DD 11223344H DATAS ENDS STACKS SEGMENT DW 10 DUP(0)STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX MOV DX,BUFA+2 MOV AX,BUFA SHL AX,1 RCL DX,1;宸︾Щ绗竴娆 SHL AX,1 RCL DX,1;宸︾Щ绗簩...
绛旓細CF锛夐佸埌DX鐨勬渶浣庝綅锛屽苟灏咲X鏈楂樹綅绉诲嚭锛屼笅闈AL AX,1,RCL DX,1瀹炵幇鐨勬槸涓鏍风殑鍔熻兘鍟婏紝鎵浠ュ疄鐜颁簡宸︾Щ涓や綅 寰堟槑鏄句笉绛夊悓 鍥犱负 绠楁湳宸︾Щ锛鏄妸鏈楂樹綅绉婚佸埌CF涓紝SAL AX,CL宸︾Щ涓ゆ锛岄偅涔圕F涓殑鏁版嵁鏄庢樉鏄疉X涓殑绗簩楂樹綅锛屽悓鐞嗭紝RCL DX,CL 缁撴潫鍚嶥X涓殑鏁版嵁涔熶笉鍙兘鏄鎯崇殑鏁版嵁浜嗭紒
绛旓細闂琛ュ厖锛氱紪鍐欑▼搴忔瀹炵幇灏 BL 涓殑姣忎竴浣嶉噸澶4 娆★紝鏋勬垚 32 浣嶇殑鍙屽瓧鍝囧櫥,寰満鍘熺悊鍟,鎴戝緱鎷夸功鎵嶈兘缂..鏃堕棿闀夸簡涓嶇,閮藉繕浜 鍝囧櫥,寰満
绛旓細rol:rol ax,1/rcl dx,1/adc ax,0 rcr:shr ax,1/rcr dx,1/rcl ax,1/ror ax,1 鐢诲浘鐞嗚В鍚э紝搴旇濂界悊瑙o紒
绛旓細鏃犵鍙峰弻瀛楀彸绉 shr dx, 1 ;鏈浣庝綅杩涘叆cf rcr ax, 1 ;cf绉诲叆鏈楂樹綅 鍦ㄧЩ浣嶈繍绠椾腑锛宑f鏄釜寰堥噸瑕佺殑鏍囧織锛岀爺绌朵竴涓媣c6鎴杤s闄勫甫鐨刲mul. asm绛夋簮浠g爜寰堟湁濂藉
绛旓細),10,13,'$'begin: push cs pop ds push cs pop es lea di,h mov cx,4 mov ax,num @1: push cx mov cx,4 mov dx,0 @@1: shl ax,1 rcl dx,1 loop @@1 cmp dl,10 jge @2 add dl,30H jmp @3 @2: add dl,37H...
绛旓細MOV AX锛 6540H锛 =>(AH)=65H,(AL)=40H AX琛ㄧず鎴愪簩杩涘埗涓0110 0101 0100 0000MOV DX锛 3210H锛=>(DH)=32H,(DL)=10H锛孌X琛ㄧず鎴愪簩杩涘埗涓0011 0010 0001 0000 MOV CL锛 04锛汼HL DX锛孋L锛灏咲X閫昏緫宸︾Щ4浣嶏紝浣庝綅琛0寰0010 0001 0000 0000 (DH)=21H,(DL)=0HMOV BL锛孉H锛 (BL...
绛旓細绠楁硶锛屽姝ゆ棤绗﹀彿鏁閫昏緫宸︾Щ涓や綅锛岀浉褰撲簬涔4.澶勭悊鏃跺彧瑕佹妸浣庡瓧鐨勬渶楂樹綅绉诲埌楂樺瓧鐨勬渶浣庝綅灏卞ソ銆傚洜姝ら噰鐢ㄥ甫杩涗綅鐨勫惊鐜Щ浣嶆寚浠ゅ彲鍋氬埌杩欑偣銆傛瘮濡傦紝褰撴墽琛宻hl ax,1鏃锛宎x鐨勬渶楂樹綅绉诲埌cf浜嗭紝鎺ョ潃鎵цrcl bx,1锛屽垯cf绉诲埌浜哹x鐨勬渶浣庝綅锛屽叾鏈浣嶅張绉诲埌cf浜嗭紝鐩镐技鐨勯亾鐞哻x銆dx鍙寜姝ゆ柟娉曡繘琛屻傚洜姝...
绛旓細鑰冭檻16浣嶇殑鎯呭喌锛屾棤娉曚竴娆℃悶瀹32浣嶆暟鎹紝闇瑕佸鏉℃寚浠ゃ備负鏂逛究锛屽厛鍋囪宸茬粡鎶婅繖4瀛楄妭鏁板彇鍑猴紝鍒嗗埆鏀惧湪AX鍜孌X涓紙AX鏀鹃珮16浣嶏紝DX鏀句綆16浣嶏級銆傛煡鐪嬬Щ浣嶆寚浠わ紝鍙戠幇瀹冧細褰卞搷鍒癈F鏍囧織锛堝嵆杩涗綅鏍囧織锛夛紝鑰屽惊鐜Щ鍔ㄦ寚浠や細鍒╃敤杩欎釜杩涗綅锛屾墍浠ヤ袱鏉℃寚浠ゅ彲浠ヨ仈鍚堝畬鎴愮Щ浣嶆搷浣溿1锛宸︾Щ锛歴hl dx, 1 ; dx鏈楂樹綅...