一个输出问题

Allan870421 2007-10-17 12:24:05
写了一个冒泡排序,然后想把他输出显示。调用2号中断一直是乱码,要不就是满天的雪花(估计是死循环)。请问如何在源程序上加入输出。
DSEG SEGMENT
DATA DB 10,9,5,1,7,3,6,4,2,8
DSEG ENDS


CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AX,DSEG
MOV DS,AX
MOV CX,10
LP1:
MOV DI,CX
MOV BX,0
LP2:
MOV AL,DATA[BX]
CMP AL,DATA[BX+1]
JGE NEXT
XCHG AL,DATA[BX+1]
MOV DATA[BX],AL
NEXT:
INC BX
DEC DI
JNZ LP2
LOOP LP1

MOV AH,4CH
INT 21H

CSEG ENDS
END START
...全文
69 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Allan870421 2007-10-23
  • 打赏
  • 举报
回复
十分感谢~~~~
dongyi940333 2007-10-17
  • 打赏
  • 举报
回复
输出的问题是要将数据用十进制形式显示到屏幕上,进行两步工作:

1 将用二进制信息存储的数据转变为十进制形式的字符串

2 显示十进制形式的字符串

详细说明见王爽<汇编语言>第197页

这里有一个程序供LZ参考:



;---------------------------------------------------------------------------------------------------------------------
; Name: 3.asm
;
; Description: 编程将data段中的数据以十进制的形式显示出来.
;
; Date: 2007-9-3
;---------------------------------------------------------------------------------------------------------------------

assume cs:code



data segment

db 10 dup (0), '$'

data ends



code segment

start:
mov ax, 10256

mov dx, 0

mov bx, data

mov ds, bx

mov si, 0

call dtoc



mov ah, 9

mov dx, 0

int 21h ;输出数字



mov ax, 4c00h

int 21h


;----------------------------------------------------------------------------------
; Name: dtoc
;
; Description:将word型数据转变为表示十进制数的字符串.
;
; ax = word型数据
;
; bx = 保存数据的位数.
;
; ds:si 指向字符串的首地址
;----------------------------------------------------------------------------------

dtoc:


mov bx, 0

s:
mov cx, 10d ;除数为10

mov dx, 0 ;高位为0

div cx ;除以10

mov cx, ax

jcxz string ;商为0则表示除法结束

add dx, 30h ;将余数转换成相应的ASCII字符

push dx ;将余数压入堆栈

inc bx ;位数加1

jmp s



string:
add dx, 30h

push dx

inc bx ;商为0,余数不为0的情况

mov cx, bx

mov si, 0



save: ;将转换后各位字符保存在数组中
pop dx

mov [si], dl

inc si

loop save



return:
ret

code ends

end start



初学不对之处请原谅!!!
fishboywdm 2007-10-17
  • 打赏
  • 举报
回复
在屏幕上能正确显示小于10的数字的代码片断。楼主可以放在mov ah,4ch之前看一下效果。

mov ax,0b800h
mov es,ax
mov cx,10
mov bx,0
mov si,0
s: mov al,ds:[si]
add al,30h
mov es:[160*10+40+bx],al
mov byte ptr es:[160*10+40+bx+1],2
inc si
inc bx
inc bx
loop s

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧