利用汇编语言写代码怎样实现循环左移如图的功能。急

如题所述

第1个回答  2016-04-09
.286
CODES SEGMENT
ASSUME CS:CODES
ORG 100H
START: MOV DX,5678H
MOV CX,0F000H
AND CX,DX ;提取原DX的高4位保存于CX
SHR CX,12 ;CX低4位即原DX高4位
;;;;
MOV AX,1234H
MOV BX,0F000H
AND BX,AX ;提取原AX的高4位保存于BX
SHR BX,12 ;使BX低4位即原AX高4位
;;;;
SHL AX,4 ;AX左移4位,低4位自动补0
OR AX,CX ;使原DX高4位成为AX低4位
;;;;
SHL DX,4 ;DX左移4位,低4位自动补0
OR DX,BX ;使原AX高4位成为DX低4位
;;;;
INT 3
CODES ENDS
END START
;;;;
;;以上汇编程序编译链接生成exe文件在Win7的DOS环境运行通过,
;;程序运行结果:DX=6781H, AX=2345H追问

有没有直接用循环语句实现的

这个不怎么明白

本回答被网友采纳
第2个回答  2016-04-09
code  segment
      assume cs:code
      org 100h
start:
      mov dx,5678h
      mov ax,1234h
      mov bx,dx
      mov cx,4
lp:   shl bx,1
      rcl ax,1
      rcl dx,1
      loop lp
      int 3
      int 20h
code  ends
      end start
 
已在debug中调试通过  !  
 
这里关键是用了一个临时寄存器bx,通过它来获得每次ax左移的进位(即最低位)

追答

另一方法:
code segment
assume cs:code
org 100h
start:
mov dx,5678h
mov ax,1234h
mov cx,4
lp: or dx,dx
jl l1
clc
jmp l2
l1: stc
l2: rcl ax,1
rcl dx,1
loop lp
int 3
int 20h
code ends
end start

追问

能在8086模拟器运行吗

追答

可以。
在masm、em86、debug中均可。

本回答被提问者采纳

利用汇编语言写代码怎样实现循环左移如图的功能。急
SHL AX,4 ;AX左移4位,低4位自动补0 OR AX,CX ;使原DX高4位成为AX低4位 ;;;SHL DX,4 ;DX左移4位,低4位自动补0 OR DX,BX ;使原AX高4位成为DX低4位 ;;;INT 3 CODES ENDS END START ;;;以上汇编程序编译链接生成exe文件在Win7的DOS环境运行通过,;;程序...

用汇编语言编写程序段实现将r6r6中的双字节数循环左移一位
用汇编语言编写程序段实现将r6r6中的双字节数循环左移一位 应将R6R6改为R6 R7中的双字节数循环左移一位 具体代码如下:ORG 0000H LJMP MAIN MAIN: MOV A,R6 MOV C,ACC.7 MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A LL: SJMP L...

怎样用汇编语言实现将(DX)(AX)中的双字逻辑左移一位
shl ax,1 ;将ax左移1位,这时候最高位移到CF中 rcl dx,1 ;将dx带进位循环左移一位,将CF(存放的是刚才ax的最高位)移到dx最低位上,同时dx所有位左移1位,dx最高位移到CF中。rcl是把操作数的最高位移入CF,而CF中原有内容移入操作数的最低位 ...

用汇编语言实现循环左移n位
mov cx,4 ;;改变这个4可以左移相应的次数!lp: mov bx,dx shl bx,1 rcl ax,1 rcl dx,1 loop lp

汇编语言怎么让三十二位逻辑左移?
;这样就实现32位的移位了 === RCL的详细使用方法:带进位的循环左移 RCL (rotate left through carry)指令的汇编格式:RCL dst,cnt 指令的基本功能:RCL 对由dst指定的寄存器或存储器操作数,连同进位标志CF左循环移动,m所指定的次数,每左移一次,把操作数的最高位移入CF,而CF中原有内容移入操...

汇编语言中,如果要将AL中的高4位移至低4位的位置,有几种方法,并详细写...
用RL A命令;这是循环左移,用四次这个命令就可以 用RR A命令;这是循环右移,用四次这个命令就可以 用RLC A命令;这是带进位左移,要用五次这个命令 用RRC A命令;这是带进位右移,要用五次这个命令 用SWAP A命令;这是高低4位直接交换 ...

汇编语言逻辑左移
因为ROL是循环左移指令,所以左移出来的最高位会移入最低位和CF因为AX = 0428H0428H = 0000 0100 0010 1000H左移两位后,变成了0001 0000 1010 0000 = 10A0H楼主,到了这里,你可以这么做,因为是循环左移,所以左移掉的位数,直接接到二进制串的后面就行了例如这道题(00)00 0100 0010 1000,我们把它的前两...

汇编语言中,如果要将AL中的高4位移至低4位的位置,有几种方法,并详细写...
你好!1、用SHR指令一位一位的移。也可以用ROR或者ROL指令一位一位的移。2、用除法指令,除以16实现高四位变第四位(乘以2相当于左移一位,除以2相当于右移一位)。暂时就想到这2方法,希望对你有帮助。如果对你有帮助,望采纳。

单片机汇编语言程序,我想写一个循环点亮的LED,然后用外部中断0接到一个...
循环点亮LED灯,也就是流水灯效果的控制,可以用定时器来控制,这样做相对代码量较少而时间比较精确,外部中断0接以按键,可以控制动态效果的启停。程序如下:ORG 0000H LJMP MAIN ORG 0003H LJMP EXT0 ;外部中断0,控制流水灯启停 ORG 000BH LJMP T0ISR ;定时0控制流水灯循环点亮 ORG 0030...

用汇编语言写:从键盘输入一个十进制数(100以内),将其转变为二进制数并...
ROL BX,CL ;将BX中的数循环左移4位,也就是把BX最高4位,放到BX的最低4位上去。MOV AL,BL ;将低8位放入AL AND AL,0FH ;取低4位 ADD AL,30H ;加上30H 从这里开始将4位二进制数转成16进制ASCII码,CMP AL,3AH ;加结果是不是少于3A JL mH2 ;是的话,...

相似回答