STACK SEGMENT STACK 'STACK' DW 100H DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT
NOTE0 DB 'DATA: ',0DH,0AH,'$'
NOTE1 DB 0DH,0AH,'GTEATZ $' NOTE2 DB 0DH,0AH,'ZERO $' NOTE3 DB 0DH,0AH,'LITTLEZ $'
BUFFER DW 14,-8,9,0,8,-3,-8,22,34,-24,21,46,75,23,-33 GREATZ DW ? ZERO1 DW ? LITTLEZ DW ?
MESS1 DB 0DH,0AH,'NAME:WUYAOZENG NO:12041215',0DH,0AH,'$' MESS2 DB 'NAME:XUTAO NO:12041429',0DH,0AH,'$'
OUT_STR DB 150 DUP('$') DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP XOR AX,AX
MOV GREATZ,AX MOV ZERO1,AX MOV LITTLEZ,AX MOV CX,14
LEA SI,BUFFER+2
ST_COUNT:
MOV AX,[SI] ADD SI,2 AND AX,AX JLE COUNT1 INC GREATZ JMP COUNT3 COUNT1:
JL COUNT2
INC ZERO1 JMP COUNT3 COUNT2:
INC LITTLEZ COUNT3:
DEC CX
JNZ ST_COUNT
LEA DX,NOTE0 MOV AH,09H INT 21H
LEA BX,BUFFER MOV CX,14 ADD BX,2
D2A:
MOV AX,[BX] AX中
CALL DEC2ASC 过程
MOV DL,' ' MOV AH,2 INT 21H
ADD BX,2 ;后移 LOOP D2A
MOV DX,OFFSET NOTE1 MOV AH,9 INT 21H
MOV AX,GREATZ CALL DEC2ASC
MOV DX,OFFSET NOTE2 MOV AH,9 INT 21H
MOV AX,ZERO1
CALL DEC2ASC
MOV DX,OFFSET NOTE3 MOV AH,9 INT 21H
MOV AX,LITTLEZ CALL DEC2ASC
;读出二进制数放在 ;调用转化和打印;输出空格
MOV AH,09H LEA DX,MESS1 INT 21H
MOV AX,4C00H
MOV AH,09H LEA DX,MESS2 INT 21H
MOV AX,4C00H
MOV AH,4CH INT 21H
;========================================================================
DEC2ASC PROC
PUSH BX ;保护 PUSH CX
LEA DI,OUT_STR ;将处理后的放入DI MOV DX,DI
CMP AX,0 JNE NON_0
ZERO: MOV BYTE PTR[DI],'0' ;如果是0 MOV BYTE PTR[DI+1],'$' JMP OUT_ASC
NON_0: TEST AX,8000H ;不是0
JZ PTIVE ;判断符号,是正号跳转 NTIVE: NEG AX ;取反 MOV BYTE PTR[DI],'-' ;置负号 JMP CON
PTIVE: MOV BYTE PTR[DI],'+' ;置正号
CON: INC DI
MOV DX,0
MOV CX,10000 ;万位
IDIV CX ;带符号数除法 ADD AL,30H
MOV byte ptr[DI],AL
MOV AX,DX MOV DX,0
MOV CX,1000 ;千位 IDIV CX
ADD AL,30H ;加30H变成ASCII MOV byte ptr[DI+1],AL ;写入
MOV AX,DX
MOV CL,100 IDIV CL
ADD AL,30H
MOV byte ptr[DI+2],AL
MOV AL,AH MOV AH,0
MOV CL,10 IDIV CL
ADD AL,30H
MOV BYTE PTR[DI+3],AL ADD AH,30H
MOV BYTE PTR[DI+4],AH
OUT_SIG:LEA DI,OUT_STR
MOV DL,BYTE PTR[DI] MOV AH,2 INT 21H
INC DI
MOV DX,DI
B2: CMP BYTE PTR[DI],'0' JNE OUT_ASC INC DI INC DX JMP B2
OUT_ASC:MOV AH,09H INT 21H
POP CX POP BX XOR AX,AX RET
;百位 ;十位 ;个位 ;打印 DEC2ASC ENDP
;====================================
CODE ENDS END START
实验结果: