回 帖 发 新 帖 刷新版面

主题:[讨论]是不是rol语句下面不应该再有其他的标志语句??

是不是rol语句下面不应该再有其他的标志语句??
我写了一个16进制转换成2进制并且输出的程序:(错误发生的地方已经标注!)
data segment
    array db 4 dup(0)
    temp db ?
    count_1 db 4
    count_2 db 8
    str_0 db 'This program can change hex_num to bin_num:','$'
    str_I db 'You can enter 4 bits:','$'
    str_2 db 'You have entered 4 bits'
data ends

code segment
    assume cs:code,ds:data
    start:
        mov ax,data
        mov ds,ax
        mov si,0
        mov cx,4
    lea dx,str_0
    mov ah,9
    int 21h
    mov dl,0ah
    mov ah,2
    int 21h
    lea dx,str_I
    mov ah,9
    int 21h
    Label_0:
        mov ah,1
        int 21h
        ;鉴定是不是超出10
        cmp al,3ah
        jc Label_0_1
            sub al,37h
            jmp Label_0_2
        Label_0_1 :
            sub al,30h;
        Label_0_2 :
            mov array[si],al

        inc si
        dec cx
    jnz Label_0
    ;sign to the end of entering
    mov dl,0ah
    mov ah,2
    int 21h

    

    mov dl,0ah
    mov ah,2
    int 21h
    
    int 21h
;输入四位十六位数完毕,接下来对四个数字依次进行转换
    mov si,0
    Label_1:
        mov cx,4
        mov al,array[si]
        rol al,4;这个地方就是导致错误发生的地方,去掉此句的话就没有问题了!
        mov temp,al
        Label_2:;这个标志句被提示improper operand type
            mov al,temp
            rol al,1
            mov temp,al
            and al,01h
            add al,30h
            mov dl,al
            mov ah,2
            int 21h
            dec cx
            jnz Label_2
        inc si
        dec count_1
        mov dl,1ch
        mov ah,2
        int 21h
        jnz Label_1
    mov ah,4ch
    int 21h
code ends
end start

但是如果去掉那一句,结果是0000-0000-0000-0000了,不是预想中的结果了
error:improper operand type

回复列表 (共4个回复)

沙发


似乎每个ror类似的语句后面的第二句容易出现这个错误……不知道怎么解决了……

板凳


哪个高手好好的说一下这些左移右移指令的用法阿?谢……

3 楼

超出一位的移位是用cl保存移动的位数的,rol al, 4是错误的指令。有些汇编器允许rol al, 4是因为它们在汇编时会直接把rol al, 4修正为四条rol al, 1。不明白的话,输出lst文件看看就知道了。

4 楼

谢谢,大哥,这个论坛要比www.bc-cn.net/好多了,有高手解答,这个问题我在以后看例子的时候纠正了,我们还没学到这个地方呢……

我来回复

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