当前位置: 代码迷 >> 汇编语言 >> 『汇编语言』的一个有关问题
  详细解决方案

『汇编语言』的一个有关问题

热度:4307   发布时间:2013-02-26 00:00:00.0
『汇编语言』的一个问题
有一个题目:按5位十进制的形式显示寄存器BX仲的内容,如果BX的值小于0,则应在显示素质之前显示负号“-”。例如:(BX)=123,显示:00123;(BX)=-123,显示:-00123

怎么编写这个程序?

------解决方案--------------------------------------------------------

count1 db 0
count2 db 0
endchar db 0
maxdigit db 0
db 0
dw 0
value dw 0
dw 0
outnum proc far
; IN:
; LONG IN DX:AX, WORD IN AX
; BL(b1_b0)=1 WORD
; 2 LONG
; BL(b3_b2)=0 BIN
; 1 DEC
; 2 HEX
; BL(b4)=1 HAS SIGN
; 0 HAS NOT SIGN
; BL(b5)=1 HAS BDHID
; 0 HAS NOT BDHID
; BH=DIGIT AMOUNT LIMIT

push ax
push bx
push cx
push dx
push ds
mov cx, cs
mov ds, cx
db 66h
xor cx, cx
db 66h
mov value, cx
db 66h
mov word ptr maxdigit, cx
mov value, ax
mov count1, bh
mov count2, bh

test bl, 10h
jz nosign

test bl, 1
jnz wordsign
longsign:
test dh, 80h
jz plusid
lminusid: not ax
not dx
inc ax
adc dx, 0
jmp totmin
wordsign:
test ah, 80h
jz plusid
wminusid:
neg ax
totmin:
mov cl, '- '
jmp totsid
plusid:
mov cl, '+ '
totsid:
call outchar

nosign:
mov value+2, dx
test bl, 2
jnz outlong
mov value+2, 0
outlong:
db 66h
mov ax, value
db 66h
xor dx, dx
test bl, 0ch
jz bini
test bl, 04h
jnz deci
hexi:
mov maxdigit, 16
mov endchar, 'H '
jmp totdig
deci:
mov maxdigit, 10
mov endchar, 'D '
jmp totdig
bini:
mov maxdigit, 2
mov endchar, 'B '
totdig:
xor dx, dx
db 66h
div word ptr maxdigit
push dx
dec count1
jnz totdig
divend:
pop cx
or cl, 30h
cmp cl, '9 '
jbe digit10
add cl, 7
digit10:
call outchar
dec count2
jnz divend

test bl, 20h
jz nobdh
mov cl, endchar
call outchar
nobdh:
pop ds
pop dx
pop cx
pop bx
pop ax
retf
outnum endp

outchar proc near
xchg ax, cx
mov ah, 0eh
int 10h
xchg ax, cx
retn
outchar endp

  相关解决方案