6.在BUFFER中定義了的十個(gè)帶符號字,將其中的負(fù)數(shù)變成絕對值送丰,并以十進(jìn)制方式輸出缔俄。
重要提示:
這道題的思路來自學(xué)長的代碼,他的十六進(jìn)制轉(zhuǎn)十進(jìn)制用的字符串器躏,太機(jī)智了俐载。
定義好BUF1,BUF10,然后先對BUF1的每一個(gè)字進(jìn)行判斷登失,是負(fù)數(shù)就NEG
然后進(jìn)行輸出遏佣,首先輸出第一個(gè)數(shù),把DI置4揽浙,也就是00000的最后一位状婶,然后把那個(gè)字類型的16進(jìn)制數(shù)除10,這時(shí)候余數(shù)存在DX中馅巷,因?yàn)橛鄶?shù)不會(huì)大于10膛虫,所以直接在DL取,加30H之后就直接進(jìn)行替換钓猬,然后減DI稍刀,重新讓DX置零,再做除法敞曹,這里結(jié)束判斷標(biāo)志是DI小于0账月,DI=FFFF,所以不能用JNB澳迫,應(yīng)該用JGE局齿,因?yàn)閷o符號數(shù)來說,FFFF>0
然后讓DI+11,因?yàn)?0000橄登,00000一共是11抓歼。在進(jìn)行上述除法操作担平,結(jié)束標(biāo)志是BUF10[DI]=‘,’锭部。
再九號調(diào)用輸出就可以了暂论。
DATAS SEGMENT
? ? BUF1 DW 0FFFEH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0901H,0FFFFH,0FFFFH,0FFFFH,0FFFFH
? ? BUF10 DB '00000,00000,00000,00000,00000,00000,00000,00000,00000,00000',0DH,0AH,'$'
? ? ;此處輸入數(shù)據(jù)段代碼
DATAS ENDS
STACKS SEGMENT
? ? ;此處輸入堆棧段代碼
STACKS ENDS
CODES SEGMENT
? ? ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
? ? MOV AX,DATAS
? ? MOV DS,AX
? ? MOV ES,AX
? ? MOV SI,0
L:
CMP SI,20
JE DISP
MOV AX,BUF1[SI]
CMP AX,0
JG NOTFU
NEG AX
NOTFU:
MOV BUF1[SI],AX
ADD SI,2
JMP L
DISP:
MOV SI,0
MOV DI,4
MOV CX,10
MOV AX,BUF1[SI]
LOOP1:
MOV DX,0
DIV CX
ADD DL,30H
MOV BUF10[DI],DL
DEC DI
CMP DI,0
JGE LOOP1
LOOP2:
ADD DI,11
ADD SI,2
CMP SI,20
JE END0
MOV AX,BUF1[SI]
LOOP3:
MOV DX,0
DIV CX
ADD DL,30H
MOV BUF10[DI],DL
DEC DI
CMP BUF10[DI],','
JNE LOOP3
JMP LOOP2
END0:
LEA DX,BUF10
MOV AH,09H
INT 21H
? ? MOV AH,4CH
? ? INT 21H
CODES ENDS
? ? END START