用汇编语言把十进制数转成二进制,再怎么转成格雷码

a752552208 2012-10-18 01:00:45
转成二进制的程序是

data segment
pr db "Input a number:$"
pr1 db 0ah,0dh,"Binary out:$"
buf db 10
nu db 0
string db 10 dup("$")
x dw ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,offset pr
mov ah,09h
int 21h
mov ah,0ah
lea dx,buf
int 21h
mov cl,nu
xor ch,ch
lea si,string
mov bp,10
xor bx,bx
lp: mov al,[si]
and al,0fh
cbw
xchg ax,bx
mul bp
xchg ax,bx
add bx,ax
inc si
loop lp
mov x,bx
lea dx,pr1
mov ah,09h
int 21h
mov cx,10h
lp1: xor dl,dl
rol bx,1
rcl dl,1
add dl,30h
mov ah,02h
int 21h
loop lp1
mov ah,4ch
int 21h
code ends
end start



然后怎么转成格雷码??

格雷码是二进制的每一位和它前面一位xor,比如二进制(0)10011,格雷码是11010。。。。。。


有人给我说
{假定ax中已有数值。
只需
mov bx,ax
shr bx,1
xor ax,bx
此时ax中即为该数的格雷码。}

但这个二进制是一位一位的输出的,怎么办??
...全文
519 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
a752552208 2012-11-11
  • 打赏
  • 举报
回复
引用 8 楼 WJN92 的回复:
引用 7 楼 的回复:那输入的数据是不是转成asc2码,这个码存放到哪个寄存器了? 引用 6 楼 的回复: 一位一位是每次循环输出一个数字,怎么把这些数字还原成一个二进制数? xor eax,eax ;eax = 0 mov ebx,data ;input data mov ecx,31 ;count loop1: bt ebx,ecx ;……
你说的什么都对,太谢谢了!!
WJN92 2012-10-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
那输入的数据是不是转成asc2码,这个码存放到哪个寄存器了?



引用 6 楼 的回复:

一位一位是每次循环输出一个数字,怎么把这些数字还原成一个二进制数?
xor eax,eax ;eax = 0
mov ebx,data ;input data
mov ecx,31 ;count
loop1:
bt ebx,ecx ;bt(data,bitoffect) -> cf
……
[/Quote]
是ASCII,看你用什么方法输入了.
例如 你使用 INT21 的1号功能 那么这个ASCII 就在AL
mov ah,1
int 21h
a752552208 2012-10-28
  • 打赏
  • 举报
回复
那输入的数据是不是转成asc2码,这个码存放到哪个寄存器了?


[Quote=引用 6 楼 的回复:]

一位一位是每次循环输出一个数字,怎么把这些数字还原成一个二进制数?
xor eax,eax ;eax = 0
mov ebx,data ;input data
mov ecx,31 ;count
loop1:
bt ebx,ecx ;bt(data,bitoffect) -> cf
adc eax,0 ;add eax + cf + 0
……
[/Quote]
WJN92 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

那些shr 移位还有什么影响标志位什么的我都不知道。
麻烦你帮我改一下。
它输出的前几位可能是0,比如00010110,不能直接把这个数shr然后异或,需要把前面的0去掉

引用 1 楼 的回复:
那你就一位一位读取啊
用shr 或 bt 之类的指令
[/Quote]
sorry ,可能我不明白你的意思
既然你知道格雷码怎么计算了,那就可以了啊
“但这个二进制是一位一位的输出的,怎么办??” 你想把二进制输出到屏幕?
WJN92 2012-10-20
  • 打赏
  • 举报
回复
一位一位是每次循环输出一个数字,怎么把这些数字还原成一个二进制数?
xor eax,eax ;eax = 0
mov ebx,data ;input data
mov ecx,31 ;count
loop1:
bt ebx,ecx ;bt(data,bitoffect) -> cf
adc eax,0 ;add eax + cf + 0
print eax ;
loop loop1

现在的问题是,我从键盘上输入一个二进制数,它被存放到哪了?
你不是输入十进制的吗?
a752552208 2012-10-20
  • 打赏
  • 举报
回复
它用两个循环怎么实现的转换啊,举个具体的例子最好
a752552208 2012-10-20
  • 打赏
  • 举报
回复
一位一位是每次循环输出一个数字,怎么把这些数字还原成一个二进制数?

现在的问题是,我从键盘上输入一个二进制数,它被存放到哪了?
比如:
mov ah,0ah
lea dx,buf
int 21h
是dx里面么?

[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:

那些shr 移位还有什么影响标志位什么的我都不知道。
麻烦你帮我改一下。
它输出的前几位可能是0,比如00010110,不能直接把这个数shr然后异或,需要把前面的0去掉

引用 1 楼 的回复:
那你就一位一位读取啊
用shr 或 bt 之类的指令

sorry ,可能我不明白你的意思
既然你知道格雷码怎么计算了,那就可以了啊
“但这个二……
[/Quote]
a752552208 2012-10-19
  • 打赏
  • 举报
回复
那些shr 移位还有什么影响标志位什么的我都不知道。
麻烦你帮我改一下。
它输出的前几位可能是0,比如00010110,不能直接把这个数shr然后异或,需要把前面的0去掉

[Quote=引用 1 楼 的回复:]
那你就一位一位读取啊
用shr 或 bt 之类的指令
[/Quote]
WJN92 2012-10-18
  • 打赏
  • 举报
回复
那你就一位一位读取啊
用shr 或 bt 之类的指令

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧