汇编语言,编写一个将AX寄存器中值依次循环左移1位,并依次显示出该十六进制数的程序.

运行环境:Windows 中的dos命令行

以下用turbo pascal的内嵌汇编实现(输出部分用pascal)。供参考。
=================================================================
以16进制显示
var
a:word;
h:array[0..3] of char;
i:integer;
begin
a:=$ef34;
asm
mov ax,seg h
mov ds,ax
mov es,ax
lea di,h
mov cx,4
mov ax,a
@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
@3: mov byte ptr [di],dl
inc di
pop cx
loop @1
end;
for i:=0 to 3 do write(h[i]:0);
writeln;
end.
======================================================
以二进制显示
var
    a:word;
    b:array[0..15] of byte;
    i:integer;
begin
    a:=$cdef;
    asm
        mov ax,seg b
        mov ds,ax
        mov es,ax
        lea di,b
        mov cx,16
        mov ax,a
@1:     shl ax,1
        jc @2
        mov byte ptr [di],0
        jmp @3
@2:     mov byte ptr [di],1
@3:     inc di
        loop @1
    end;
    for i:=0 to 15 do write(b[i]:0);
    writeln;
end.  

温馨提示:内容为网友见解,仅供参考
无其他回答

...AX中二进制“1”的个数,结果一位十六进制数的形式显示
code segment assume cs:code start:mov ax,1234 mov bl,0;统计1的个数 mov cx,16;循环次数 loop1:test ax,8000h;不断的左移,与8000h比较获取1的个数 jnz loop2 inc bl shl ax,1 loop2:loop loop1 ;输出1的个数 mov dl,bl add dl,30h mov ah,02h int 21h mov ah,4ch int 21h...

编制程序将AX寄存器内的二进制数以十六进制数的形式在屏幕显示
ax ;ax转到bx中 mov ah,0ehl0: rol bx, cl ;循环左移4位 mov al, bl ;第1次循环时 and al, 0fH ;的最高4位,即此时的最低4位 cmp al, 9 ;与9做比 jbe l1 ;<=9时

用汇编语言(MASM)编程将寄存器BX中的16位二进制内容颠倒过来
ASSUME CS:CODES START:MOV BX,1234H MOV AX,BX MOV CX,16 LOOP2:SHR AX,1;右移一位,D0到CF RCL BX,1;左移一位,CF到D0 LOOP LOOP2;循环L00P2,直到CX==0成立 MOV AH,4CH ;带返回码结束功能 INT 21H ;返回系统 CODES ENDS END START ...

1.将AX中的值以十六进制形式显示。 要求:主程序利用寄存器把AX的值传送...
数放在ax里面 MOV AX,DATAS MOV DS,AX mov ax,0f2h mov cl,4 push ax shl ax,cl cmp ah,9 ja n1 add ah,30h mov dl,ah mov ah,02h int 21h jmp n2 n1:add ah,37h mov dl,ah mov ah,02h int 21h n2:pop ax and al,0fh cmp al,9 ja n3 add al,30h mov dl,al mov a...

...把存放在BX寄存器内的值(二进制数)用十六进制数的形式在屏幕上显示出...
MOV DS,AX MOV BX,1111110111100001B MOV CH,4 ;循环四次 LOP: MOV CL,4 ROL BX,CL ;每次循环环左移四位 MOV DX,BX AND DL,0FH ;每次取低四位,来表示一个十六进数 ADD DL,30H ;转化成为ASSIC码 CMP DL,3AH ;判断DL是否大于10的ASSIC码(A+30H)JB NEXT ADD DL,7...

...编写1个程序,统计寄存器AX中二进制位1的个数,结果以1位十六进制数形...
mov cl,16 ;ax是一个字,有16位二进制 mov dl,0 ;用于累加ax中1的个数 a:rol ax,1 ;循环左移1称,16次循环后复原 jnc next ;该位是0,则CF=0,这里就是测试CF的值,为0则跳转不累加 inc dl ;CF=1时,dl+1 next:loop a ;循环结构 add dl,30h ;将dl的值...

汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数
;disp_al子程序将寄存器AL中的数值以十六进制显示出来disp_al: mov dh, al mov bx, 2 ;bx用于循环,一个字节最多可以显示成两个字符,所以循环次数是2次 mov cl, 4 ;首先显示高4位,在下次循环进再显示低4位 shr al, clagain: and al, 0fh cmp al, 9 ja hex add al, '0' ;如果小于9,加上字符...

汇编 已知AX中存放有一有符号数,试编程求其绝对值。
下面的程序应该符合你的要求,你可以改下寄存器:DATAS SEGMENT X DW -23456 Y DB 5 DUP(?),'$' ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX LEA BX,Y MOV CX,X CALL...

用汇编语言! 编一程序把键入的十六进制数转化 成十进制数。
编一程序把键入的十六进制数,转化成十进制数,并在屏幕上显示。键入的十六进制数,不限位数。如超出四位,只将最后四位做转换并显示。若键入非十六进制数,则不予显示,等待继续输入。键入回车符,结束输入。程序如下:

1、编制子程序:把AL寄存器内的二进制数用十六进制形式在屏幕上显示...
.model small.codestart: mov al,2DH mov ch,2 mov cl,4 mov ah,2 mov bl,alp0: rol bl,cl mov dl,bl and dl,0fh cmp dl,9 jbe p1 add dl,7p1: add dl,30h int 21h dec ch jnz p0 mov ah,4ch int 21hend start ...

相似回答