如何用汇编语言将BX中的十进制数以八进制形式显示出来

2021-04-03 05:17:36 字数 6163 阅读 8951

1楼:匿名用户

两种方法bai:

查表法计算法du

将bx的内容连续zhi

除以8,余数加上dao30h,转换成ascii码,就回可以显示了(计算法,查表就是将答

余数在table表中取出对应的ascii数值),当商为零,那么,那时候的余数就是最高位了

如何用汇编语言编写:从键盘上输入一个十六进制数,将其转换成一个十进制数显示。

2楼:匿名用户

datasegment

data1db?

data2db2dup(?)

data20db2dup(?)

data3db'inputerror,pleaseenteragain!','$'

dataends

stacksegment

db5dup(?)

stackends

codesegment

assumecs:code,ds:data,ss:stackstart:movax,data

movds,ax

movax,stack

movss,ax

movbx,0

input:movah,01h

int21h

cmpal,51h;判断输入的字符是否为qjeexit

;如果是q就退出

cmpal,71h;判断输入的字符是否为qjeexit

;如果是q就退出

pushax

;把从键盘输入的字符的ascii存到堆栈段subal,30h;判断是否为数字

cmpal,00h

jlindi;如果不是就提示错误

cmpal,09h;

movbl,al;

jleoutput2;如果是数字就输出

popax;把al的值取出来

pushax;

movbl,al

subal,41h;判断是否为大写字母a到fcmpal,00h

jlindi

;如果不是就提示错误

cmpal,06h

jlchange

popax

pushax

movbl,al

subal,61h;判断是否为小写字母a到fcmpal,00h

jlindi;如果不是就提示错误

cmpal,06h

jlchange

popax

jmpindi

change:movsi,0

movdi,0

movcl,4

moval,bl

andal,11011111b;统一换为大写字母再转换,如果是大写字母就不变

subal,31h

movbl,al

andal,0fh;与运算,取低位

mov[data2+si],al;把个位数存到data2中moval,bl

saral,cl;算术右移,取高位

mov[data20+di],al;把十位数存到data20中output1:movdl,48h;输出十六进制符号hmovah,02h

int21h

movdl,3dh;输出等号‘=’

movah,02h

int21h

movdl,[data20+di];输出十位数adddl,30h

movah,02h

int21h

movdl,[data2+si];输出个位数adddl,30h

movah,02h

int21h

movdl,20h

movah,02h

int21h

jmpinput;跳到输入数字

output2:movdl,48h;输出数字movah,02h

int21h

movdl,3dh

movah,02h

int21h

movdl,bl

adddl,30h

movah,02h

int21h

movdl,20h

movah,02h

int21h

jmpinput

indi:movdl,20h;提示子程序movah,02h

int21h

movdx,offsetdata3;显示提示信息movah,09h

int21h

jmpinput

exit:movah,4ch

int21h

codeends

endstart

如何使用汇编语言将bx寄存器内的二进制数用十六进制数的形式在屏幕上显示出来?

3楼:匿名用户

disp proc near ;显示16进制数(字母大写)子程序,入口:bx寄存器存有二进制待显示数

mov dl,bh

mov cl,4

shr dl,cl

cmp dl,10

jc hex1

add dl,30h

hex1: add dl,37h

mov ah,02h

int 21h

mov dl,bh

and dl,0fh

cmp dl,10

jc hex2

add dl,30h

hex2: add dl,37h

mov ah,02h

int 21h

mov dl,bl

mov cl,4

shr dl,cl

cmp dl,10

jc hex3

add dl,30h

hex3: add dl,37h

mov ah,02h

int 21h

mov dl,bl

and dl,0fh

cmp dl,10

jc hex4

add dl,30h

hex4: add dl,37h

mov ah,02h

int 21h

mov dl,48h

mov ah,02h

int 21h

retdisp endp

4楼:万世流香

dec ch

cmp ch,0 ;这句忘了

jnz lop

5楼:匿名用户

程序没错呀,我直接复制过来,用ma**6.15编译成功,运行正确。

试用汇编语言编写一个程序,把存放在bx寄存器内的值(二进制数)用十六进制数的形式在屏幕上显示出来。

6楼:万世流香

data segment

str db 'h',0ah,0dh,'$'

code segment

assume cs:code,ds:datastart: mov ax,data

mov ds,ax

mov bx,1111110111100001bmov 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)62616964757a686964616fe4b893e5b19e31333262376665

jb next

add dl,7 ;大于10再加上7next: mov ah,2

int 21h

dec ch

jnz lop

mov dx,offset str

mov ah,9

int 21h

mov ah,4ch

int 21h

code ends

end start

汇编语言怎样将内存中的数据在屏幕上以十六进制形式显示出来

7楼:匿名用户

汇编语言将内存中的数据在屏幕上以十六进制形式显示出来,涉及内存数据读取、数制转换、显示控制等,参见以下程序:

data segment

total dw abcdh

data ends

code segment

assume cs:code,ds:datamain proc far

start: mov ax,data

mov ds,ax

mov bx,total

mov dl,bh

mov cl,4

shr dl,cl

cmp dl,10

jc hex1

add dl,30h

hex1: add dl,37h

mov ah,02h

int 21h

mov dl,bh

and dl,0fh

cmp dl,10

jc hex2

add dl,30h

hex2: add dl,37h

mov ah,02h

int 21h

mov dl,bl

mov cl,4

shr dl,cl

cmp dl,10

jc hex3

add dl,30h

hex3: add dl,37h

mov ah,02h

int 21h

mov dl,bl

and dl,0fh

cmp dl,10

jc hex4

add dl,30h

hex4: add dl,37h

mov ah,02h

int 21h

mov dl,48h

mov ah,02h

int 21h

mov ah,4ch

int 21h

retmain endp

8楼:做而论道

如果是字符的话输出的还是16进制数吗?

我现在要写一个排序的程序,想把排序之前和之后的数据显示出来-----------

可以参考一个现成的:

http://hi.baidu.com/%d7%f6%b6%f8%c2%db%b5%c0/blog/item/5adeb99125d2159ba877a4ae.html

9楼:夜隐霜华

先将数据转换成对应的abcii码,用dos调用输出

10楼:匿名用户

dos 功能调用,查查就知道了。书上都讲的很清楚,输出什么格式的需要调用几号功能,输出的数据放在**之类的

汇编语言,统计bx中1的个数,并在屏幕上以十六进制形式显示。 用简化

11楼:永恒

codesegment

assumecs:code

org100h

start:

pushcs

popds

movbx,x

moval,0

movcx,16

@1:shlbx,1;逻辑移位通过进位标志检查1的个数jnc@2

incal

@2:loop@1

movbl,al;将计数器的值移入bl中movbh,0

leasi,tab1

movah,2

movdl,[bx+si];查表得到数值bx对应的ascii码

int21h

movah,4ch

int21h

xdw01234h

tab1db'0123456789abcdefg';显示g时表示是16个1

codeends

endstart

如何用JAVA语言将十六进制数转换成二进制数,并输出

1楼 public static void main string args static string hextobin string s 如何用java语言将十六进制数转换成二进制数,并输出 2楼 匿名用户 public class aa system out println bstr 如何用j...

用c语言写程序,可以求出数二进制表示中有多少个

1楼 blue丶小 dev cpp 5 4 c通过编译,输入一个10进制转换成2进制,并统计有几个0 include int main char s a e a i 1 t while e s int n sum 0 for n 0 n 2楼 泰山 include stdio h include s...