汇编怎样输出负数?

;--------------------------定义堆栈段-------------------------------S SEGMENT STACK DW 100H DUP(?) TOP LABEL WORDS ENDS;--------------------------定义数据段-------------------------------DATA SEGMENT X DW ?DATA ENDS;--------------------------定义代码段-------------------------------CODE SEGMENT ASSUME CS:CODE MOV SI,0 ;----------------------装入栈段地址------------------------------- MOV AX,S MOV SS,AX LEA SP,TOP ;-----------------------做除法运算取余压入栈中---------------------- ;准备 MOV X,-79 MOV AX,0 MOV AX,X MOV CL,10 L: DIV CL MOV DL,AH MOV DH,0 MOV AH,0 PUSH DX INC SI CMP AL,0 JNZ L ;----------------------余数出栈并显示------------------------------ M: POP DX ADD DL,30H MOV AH,02H INT 21H DEC SI CMP SI,0 JNZ M ;------------------------------------------------- MOV AX,4C00H INT 21H CODE ENDSEND想输出X=-79
2026年09月20日 21:47
有2个网友回答
网友(1):

你是指在屏幕上输出吧?

输出前做一个判断,如果是负值,则先输出一个'-'号,然后把该数取绝对值,再进行输出。

代码如下:

;用10进制把AX寄存器中的数值输出到屏幕上
print proc near
  mov bx,10
  test ax,8000H ;判断最高位
  jnz p0         ;正数
  push ax        ;负数,输出'-'
  mov ax,0e2dH   ;'-' ascii 2dh
  int 10h
  pop ax
  neg ax
p0:
  mov dx,0
  xor cx,cx
Q0:
  xor dx,dx
  div bx
  xor dx,0e30h
  push dx
  inc cx
  cmp ax,0
  jnz Q0
Q1:
  pop ax
  int 10h
  loop Q1
  ret
print endp

网友(2):

ASSUME CS:CODE, DS: DATA

DATA SEGMENT
X DW ?
DATA ENDS

CODE SEGMENT

START:

MOV AX, DATA
MOV DS, AX
;----------------------- ;准备
MOV X, -79 ;-128~-1

MOV DL, '-'
MOV AH, 02H
INT 21H

MOV AX, X
NEG AX ;负数变成正数。下面按照正数,来显示

MOV BL, 10
MOV CX, 0
L:
MOV AH, 0
DIV BL
MOV DL, AH
ADD DL, 30H
PUSH DX
INC CX
CMP AL, 0
JNZ L

MOV AH, 02H
M:
POP DX
INT 21H
LOOP M

MOV AX, 4C00H
INT 21H

CODE ENDS
END START

想输出X=-79