主题:求助~~~怎样用汇编把8位二进制数拆分成2个4位的??
kiss_jason
[专家分:0] 发布于 2007-04-01 02:00:00
由于本人只是初学 想请教一下大家怎么才可以把一个8位的二进制数用汇编拆分成为2个4位的 然后再合并起来???
举个例子 比如说11001010 如何把它拆分成为 1100 和 1010
之后再合并成11001010
有特定的函数可以做这个嘛?? 谢谢大家了。。
回复列表 (共6个回复)
沙发
freeeerf [专家分:5440] 发布于 2007-04-01 10:21:00
我没见过这样的函数,但可以用循环移位和位操作自己搞定.
移位的指令有rol,ror,位操作的有:and,or
比如:
a db 3
mov ax,0FH
and ax,a
就把a的低四位放到al中了.
板凳
tanchuhan [专家分:15140] 发布于 2007-04-01 10:37:00
分拆再合并,还不是没有改变吗?
用MASM写的,你注意蓝色部分就行了:
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.data
var_8 db 0
a_4 db 0
b_4 db 0
new_var_8 db 0
.code
START:
;赋初始值
mov var_8, 08Ch
[color=#0000FF]
;拆var_8的低4位到a_4
mov al, var_8
shl al, 4
shr al, 4
mov a_4, al
;拆var_8的高4位到b_4
mov al, var_8
shr al, 4
mov b_4, al
;合并之前拆开的两个4位到new_var_8
mov al, a_4
mov ah, b_4
shl ah, 4
and al, ah
mov new_var_8, al
[/color]
invoke ExitProcess,0
END START
3 楼
kiss_jason [专家分:0] 发布于 2007-04-01 10:39:00
可以详细的解释一下吗? 由于之前没有用过汇编 所以还是不大明白。。谢谢
4 楼
kiss_jason [专家分:0] 发布于 2007-04-01 10:40:00
。。回复的时候没看见2楼的 不好意思 现在看到了 慢慢研究一下 谢谢了
5 楼
kiss_jason [专家分:0] 发布于 2007-04-01 10:46:00
[quote]分拆再合并,还不是没有改变吗?
[/quote]
我是要用通过单片机的ADC的两个输入口输入不同数据 之后为了在pc端区分 所以要把得到的2个8位二进制数分成两部分 之后再在这两部分的前面加上4位地址信息 这样就可以在pc端用VB接收 并且区分开来。。
谢谢你的回复
6 楼
汇编小七 [专家分:30] 发布于 2007-04-13 22:23:00
[quote]分拆再合并,还不是没有改变吗?
用MASM写的,你注意蓝色部分就行了:
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.data
var_8 db 0
a_4 db 0
b_4 db 0
new_var_8 db 0
.code
START:
;赋初始值
mov var_8, 08Ch
[color=#0000FF]
;拆var_8的低4位到a_4
mov al, var_8
shl al, 4
shr al, 4
mov a_4, al
;拆var_8的高4位到b_4
mov al, var_8
shr al, 4
mov b_4, al
;合并之前拆开的两个4位到new_var_8
mov al, a_4
mov ah, b_4
shl ah, 4
and al, ah
mov new_var_8, al
[/color]
invoke ExitProcess,0
END START[/quote]
shl al,4
shr ah,4
的写法好像不对因该改为:
mov cl,4
shl al,cl
shr al,cl
我来回复