版本一
DATAS SEGMENT
;此处输入数据段代码
array dw 6789,-1234,0,1
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov cx,lengthof array
xor bx,bx
again:mov ax,array[bx];
call dispsiw;调用子程序显示一个数据
add bx,type array
call dispcrlf;换行以便显示下一个数据
loop again
jmp ex
dispsiw proc near
push ax
push bx
push dx
test ax,ax;判断是零、正数或负数
jnz dsiw1;不是零,跳转
mov dl,'0'
mov ah,2
int 21h
jmp dsiw5;转向显示
dsiw1:jns dsiw2;是正数,跳转
mov bx,ax
mov dl,'-';是负数,显示负号
mov ah,2
int 21h
mov ax,bx
neg ax;数据求补(绝对值)
dsiw2:mov bx,10
push bx;10压入堆栈,作为退出标志
dsiw3:cmp ax,0 ;数据(商)为零,转向保存
jz dsiw4
xor dx,dx ;扩展被除数为DX.AX
div bx ;数据除以10:DX.AX÷10
add dl,30h ;余数(0~9)转换为ASCII
push dx ;数据先低位后高位压入堆栈
jmp dsiw3
dsiw4:pop dx
cmp dl,10
je dsiw5
mov ah,2;
int 21h
jmp dsiw4
dsiw5:pop dx
pop bx
pop ax
ret
dispsiw endp
dispcrlf proc near
push ax
push dx
mov dl,0dh ;输出回车字符
mov ah,2
int 21h
mov dl, 0ah ;输出换行字符
int 21h
pop dx
pop ax
ret
dispcrlf endp
ex: mov al,4ch
int 21h
CODES ENDS
END START
版本二
;eg504.asm
.model small
.stack
.data
array dw 6789,-1234,0,1,-9876,32767,-32768,5678,-5678,9000
count = lengthof array
.code
.startup
mov cx,count
xor bx,bx
again: mov ax,array[bx] ;将AX=入口参数
call dispsiw ;调用子程序,显示一个数据
add bx,type array
call dispcrlf ;光标回车换行以便显示下一个数据
loop again
.exit
dispsiw proc ;显示有符号十进制数的通用子程序
push ax ;入口参数:AX=欲显示的数据(补码)
push bx
push dx
test ax,ax ;判断数据是零、正数或负数
jnz dsiw1
mov dl,'0' ;是零,显示“0”后退出
mov ah,2
int 21h
jmp dsiw5
dsiw1: jns dsiw2 ;是负数,显示“-”
mov bx,ax ;AX数据暂存于BX
mov dl,'-'
mov ah,2
int 21h
mov ax,bx
neg ax ;数据求补(绝对值)
dsiw2: mov bx,10
push bx ;10压入堆栈,作为退出标志
dsiw3: cmp ax,0 ;数据(商)为零,转向显示
jz dsiw4
xor dx,dx ;扩展被除数DX.AX
div bx ;数据除以10:DX.AX÷10
add dl,30h ;余数(0~9)转换为ASCII码
push dx ;数据各位先低位后高位压入堆栈
jmp dsiw3
dsiw4: pop dx ;数据各位先高位后低位弹出堆栈
cmp dl,10 ;是结束标志10,则退出
je dsiw5
mov ah,2 ;进行显示
int 21h
jmp dsiw4
dsiw5: pop dx
pop bx
pop ax
ret ;子程序返回
dispsiw endp
dispcrlf proc ;回车换行子程序
push ax ;保护寄存器
push dx
mov dl,0dh ;输出回车字符
mov ah,2
int 21h
mov dl,0ah ;输出换行字符
mov ah,2
int 21h
pop dx ;恢复寄存器
pop ax
ret ;子程序返回
dispcrlf endp
end