回 帖 发 新 帖 刷新版面

主题:求助~~~怎样用汇编把8位二进制数拆分成2个4位的??

由于本人只是初学 想请教一下大家怎么才可以把一个8位的二进制数用汇编拆分成为2个4位的 然后再合并起来???

举个例子 比如说11001010  如何把它拆分成为 1100 和 1010
之后再合并成11001010

有特定的函数可以做这个嘛?? 谢谢大家了。。

回复列表 (共6个回复)

沙发

我没见过这样的函数,但可以用循环移位和位操作自己搞定.
移位的指令有rol,ror,位操作的有:and,or
比如:
a db 3

mov ax,0FH
and ax,a
就把a的低四位放到al中了.

板凳

分拆再合并,还不是没有改变吗?
用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 楼

可以详细的解释一下吗? 由于之前没有用过汇编 所以还是不大明白。。谢谢

4 楼

。。回复的时候没看见2楼的 不好意思 现在看到了 慢慢研究一下 谢谢了

5 楼

[quote]分拆再合并,还不是没有改变吗?
[/quote]

我是要用通过单片机的ADC的两个输入口输入不同数据 之后为了在pc端区分 所以要把得到的2个8位二进制数分成两部分 之后再在这两部分的前面加上4位地址信息 这样就可以在pc端用VB接收 并且区分开来。。

谢谢你的回复 

6 楼

[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

我来回复

您尚未登录,请登录后再回复。点此登录或注册