首页 > 电脑

我编了个三个小于十进制数的汇编程序为啥输出总是23呢求大神讲解

更新时间2018-06-23 18:32:34

data segment

one db 'please one:$'

two db 'please two:$'

three db 'please three:$'

four db 'mid:$'

x1 db 3,0,3 dup(20h)

x2 db 3,0,3 dup(20h)

x3 db 3,0,3 dup(20h)

sw dw 4 dup(?)

data ends

code segment

BEGIN PROC FAR

assume cs:code,ds:data

start:

 mov ax,data

 mov ds,ax

 

 mov ah,09h

 mov dx,offset one

 int 21h

 

 mov ah,0ah 

 mov dx,offset x1

 int 21h

 

 mov ah,2

 mov dl,0dh

 int 21h

 mov ah,2

 mov ah,0ah

 int 21h

 

 mov ah,09h 

 mov dx,offset two

 int 21h

 

 mov ah,0ah

 mov dx,offset x2

 int 21h

 

mov ah,2

 mov dl,0dh

 int 21h

 mov ah,2

 mov ah,0ah

 int 21h

 

 mov ah,09h

 mov dx,offset three

 int 21h

 

 mov ah,0ah

 mov dx,offset x3

 int 21h

 

mov ah,2

 mov dl,0dh

 int 21h

 mov ah,2

 mov ah,0ah

 int 21h

 

 mov ax,word PTR x1

 AND ax,0f0fh

 mov cl,4

 shl al,cl

 or al,ah

 mov byte ptr sw,al

 

 mov ax,word ptr x2

 and ax,0f0fh

 shl al,cl

 or al,ah

 mov byte ptr sw+1,al

 

 mov ax,word ptr x3

 and ax,0f0fh

 shl al,cl

 or al,ah

 mov byte ptr sw+2,al

 

 mov al,sw

 mov bl,sw+1

 mov cl,sw+2

 cmp al,bl

 jnc s0        

 xchg al,bl

 

 s0:cmp al,cl

     jnc s2

    jmp sc

 s2:cmp bl,cl

    jnc s3

    mov al,cl

    jmp sc

 s3:mov al,bl

    jmp sc                    

 sc:mov ah,09h      

 mov dx,offset four

 int 21h

 

 mov ah,al

 and ah,0fh

 add ah,30h

 

 mov dl,ah

 mov ah,02h

 int 21h

 

 mov ah,al

 mov cl,4

 ror ah,cl

 and ah,0fh

 add ah,30h

 

 mov dl,ah

 mov ah,2

 int 21h

 

 ret

begin endp

code ends

end start

以上是我的程序 感谢大神

改好的,你参考下

data segment
one db 'please one:$'
two db 'please two:$'
three db 'please three:$'
four db 'mid:$'
x1 db 3,0,3 dup(20h)
x2 db 3,0,3 dup(20h)
x3 db 3,0,3 dup(20h)
sw db 4 dup(0) ;你的这个只要字节就可以,不要字的
data ends
code segment
BEGIN PROC FAR
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax

mov ah,09h
mov dx,offset one
int 21h

mov ah,0ah
mov dx,offset x1
int 21h

mov ah,2
mov dl,0dh
int 21h
mov ah,2
mov dl,0ah ;ah=0a是输入了,应该是dl=0a
int 21h

mov ah,09h
mov dx,offset two
int 21h

mov ah,0ah
mov dx,offset x2
int 21h

mov ah,2
mov dl,0dh
int 21h
mov ah,2
mov dl,0ah ;同上的错
int 21h

mov ah,09h
mov dx,offset three
int 21h

mov ah,0ah
mov dx,offset x3
int 21h

mov ah,2
mov dl,0dh
int 21h
mov ah,2
mov dl,0ah;同上
int 21h

mov ax,WORD PTR x1+2 ;x1+2才是数据,下同
AND ax,0f0fh
mov cl,4
shl al,cl
or al,ah
mov byte ptr sw,al

mov ax,word ptr x2+2
and ax,0f0fh
shl al,cl
or al,ah
mov byte ptr sw+1,al

mov ax,word ptr x3+2
and ax,0f0fh
shl al,cl
or al,ah
mov byte ptr sw+2,al

mov al,sw
mov bl,sw+1
mov cl,sw+2
cmp al,bl
jnc s0        
xchg al,bl

s0:cmp al,cl
    jnc s2
   jmp sc
s2:cmp bl,cl
   jnc s3
   mov al,cl
   jmp sc
s3:mov al,bl
   jmp sc                    
sc:
mov bx,ax ;ax会因int 21H改变,所以要保存
mov ah,09h      
mov dx,offset four
int 21h

mov ah,bl;先显示高位
mov cl,4
ror ah,cl
and ah,0fh
add ah,30h

mov dl,ah
mov ah,2
int 21h

mov ah,bl ;显示低位
and ah,0fh
add ah,30h

mov dl,ah
mov ah,02h
int 21h

mov ah,4ch
int 21h
ret
begin endp
code ends
end start


相关标签:大神

上一篇:抽出功能不能用了。

下一篇:我设置了一个关机程序开机自启动,咋办。。