回 帖 发 新 帖 刷新版面

主题:这里有一道题

cmp   al, bl
      jae   next
      xchl  al, bl ;好象写错了,是交换指令
next: ……
这一段意思是"如果al < bl就交换",题目问不用转移指令怎么实现同样功能?我写了一个超长的,请问有没有简单的?
      push  cx
      mov   cl, bl
      sub   cl, al
      pushf
      mov   ch, [sp]
      popf
      and   ch, 1
      dec   ch
      and   cl, ch
      add   al, cl
      sub   bl, cl
;用汇编虽然老长,但写出来后感觉挺爽的~

回复列表 (共4个回复)

沙发

xchl  al, bl ;好象写错了,是交换指令
应该是 xchg

mov   ch, [sp] ; 不正确
///////////////////////////////////////////////
//下面是一个完整的程序,有些多,没有想到更好的办法
//交个朋友,好吗
.386
.model tiny


code    segment use16
        org        100H
main:
        mov        al, 1
        mov        bl, 2
        
        push    cx
        mov        cl, al
        mov        ch, bl
        push    cx
        push    cx
        
        cmp        al, bl
        setc    cl ;80386 指令
        xor        ch, ch
        mov        bx, sp
        xchg    si, cx
        mov        al, [bx + si]
        inc        si
        mov        bl, [bx + si]
        mov        si, cx

        add        sp, 4
        pop        cx
        ret
code    ends
        end main
;asm: masm v6.14
;linker: turbo linker v3.01

板凳

好,交个朋友!多跟你学学汇编。

3 楼


好,要像你学习 c\c++[em5]

4 楼

//再贴一种“方法”
                        mov        bh, al
            push    bx
            cmp        bh, bl
            xchg    bh, bl
            setc    bl
            xor        al, bh
            xor        bh, bh
            add        bx, sp
            mov        bl, [bx]
            xor        al, bl
            add        sp, 2

我来回复

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