读书人

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

发布时间: 2012-02-20 21:18:24 作者: rapoo

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

怎么编写这个程序?

[解决办法]

count1db0
count2db0
endchardb0
maxdigitdb0
db0
dw0
valuedw0
dw0
outnumprocfar
; 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

pushax
pushbx
pushcx
pushdx
pushds
movcx, cs
movds, cx
db66h
xorcx, cx
db66h
movvalue, cx
db66h
movword ptr maxdigit, cx
movvalue, ax
movcount1, bh
movcount2, bh

testbl, 10h
jznosign

testbl, 1
jnzwordsign
longsign:
testdh, 80h
jzplusid
lminusid:notax
notdx
incax
adcdx, 0
jmptotmin
wordsign:
testah, 80h
jzplusid
wminusid:
negax
totmin:
movcl, '- '
jmptotsid
plusid:
movcl, '+ '
totsid:
calloutchar

nosign:
movvalue+2, dx
testbl, 2
jnzoutlong
movvalue+2, 0
outlong:
db66h
movax, value
db66h
xordx, dx
testbl, 0ch
jzbini
testbl, 04h
jnzdeci
hexi:
movmaxdigit, 16
movendchar, 'H '
jmptotdig
deci:
movmaxdigit, 10
movendchar, 'D '
jmptotdig
bini:
movmaxdigit, 2
movendchar, 'B '
totdig:
xordx, dx
db66h
divword ptr maxdigit
pushdx
deccount1
jnztotdig
divend:
popcx
orcl, 30h
cmpcl, '9 '
jbedigit10
addcl, 7
digit10:
calloutchar
deccount2
jnzdivend

testbl, 20h
jznobdh
movcl, endchar
calloutchar
nobdh:
popds
popdx
popcx
popbx
popax
retf
outnumendp

outcharprocnear
xchgax, cx
movah, 0eh
int10h
xchgax, cx
retn
outcharendp

读书人网 >汇编语言

热点推荐