汇编:在BUFFER中定义了的十个带符号字,将其中的负数变成绝对值,并以十进制方式输出

ASSUME CS:CODES,DS:DATAS
DATAS SEGMENT
    BUFFER DW -1666,-5555,-4444,-3333,-2222,-1111,0,11111,22222,5333
    ;10个数20个字节
    RST DB 5 DUP(?);14H开始
    KONG DB 0DH,0AH,'$';用于显示回车换行
DATAS ENDS

CODES SEGMENT
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV SI,0;与BUFFER配合使用用来处理数据
    MOV CX,10
COMP:
    MOV DI,0;指向RST的第一位
    CMP BUFFER[SI],0
    JNS ISPOS;判断是否为非负数
    NEG BUFFER[SI];如果是负数执行这步,如果不是跳过去
ISPOS:
	MOV BX,10
	MOV AX,BUFFER[SI];将待处理的数移入AX
TOTEN:	;固定手法得牢记
	CWD;扩展成双字型数据(AX)->(DX)+(AX)相当于把(DX)清零
	DIV BX;(BX) = 0AH相当于不断除以10余数保存在DX里
	;AND DL,0FH;0FH = 1111B
	OR DL,30H;(DL)+30H转换为asc码
	MOV RST[DI],DL;保存asc码
	INC DI
	CMP AX,0;字符是否全部处理完
	JNZ TOTEN
PRINT:	
	DEC DI;因为四个数字都是一样的
	MOV DL,RST[DI]
	MOV AH,02H;显示
	INT 21H
	CMP DI,0
	JNZ PRINT;打印这5个字节的asc码
	LEA DX,KONG;显示回车换行
	MOV AH,09H
	INT 21H
	ADD SI,2;处理下一个字节
    LOOP COMP
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START	

你可能感兴趣的:(微机原理闹危机)