一个简单的汇编程序请看看有什么问题

sanwuxiansheng 2008-11-02 02:53:18

;在屏幕上显示bcd的数字,即显示12345678912345678912
.MODEL SMALL
.STACK
.DATA
BCD DB 12H,34H,56H,78H,91H,23H,45H,67H,89H,12H
STRING DB 20 DUP(?)
COUNT EQU $-BCD
.CODE
.STARTUP
LEA BX, BCD
LEA DI, STRING
MOV CX, COUNT
CALL SWITCHASC
LEA DX, STRING
MOV AH, 09H
INT 21H
.EXIT 0


SWITCHASC PROC NEAR
START: MOV AL, [BX]
AND AL, 0F0H
PUSH CX
MOV CX, 0004H
SHR AL, CL
POP CX
ADD AL, '0'
MOV [DI], AL
INC DI
MOV AL, [BX]
AND AL, 0FH
ADD AL, '0'
MOV [DI], AL
INC DI
INC BX
LOOP START
SWITCHASC ENDP
END
...全文
141 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhizhi_2008 2008-11-02
  • 打赏
  • 举报
回复
顶,太监啊。。。不给分,顶。
sanwuxiansheng 2008-11-02
  • 打赏
  • 举报
回复
谢谢了
zhizhi_2008 2008-11-02
  • 打赏
  • 举报
回复
。。打错字了,DS要初始化,和子函数里要个ret
zhizhi_2008 2008-11-02
  • 打赏
  • 举报
回复
INCLUDE Irvine16.inc

.DATA
BCD db 12H,34H,56H,78H,91H,23H,45H,67H,89H,12H
STRING db 20 DUP(?), '$'
count equ STRING-BCD


.code
main PROC
mov ax, @DATA
mov ds, ax
lea bx, BCD
lea di, STRING
mov cx, count
call SWITCHASC
LEA DX, STRING
MOV AH, 09H
INT 21H

call WaitMsg
exit
main ENDP


SWITCHASC PROC
START:
MOV AL, [BX]
AND AL, 0F0H
PUSH CX
MOV CX, 0004H
SHR AL, CL
POP CX
ADD AL, '0'
MOV [DI], AL
INC DI
MOV AL, [BX]
AND AL, 0FH
ADD AL, '0'
MOV [DI], AL
INC DI
INC BX
LOOP START
ret
SWITCHASC ENDP

END main

MASM6下编译运行是可以的,还有两个问题忘了说了,就是DS到初始化,和函数里要个ret,你看看代码吧
sanwuxiansheng 2008-11-02
  • 打赏
  • 举报
回复
快点回答哦,等我能显示出来了立马给你分。
sanwuxiansheng 2008-11-02
  • 打赏
  • 举报
回复
恩,这两个问题是对的,不过我运行时怎么还显示不出字符串来啊。能帮我解决不?
codefox 2008-11-02
  • 打赏
  • 举报
回复
对,给分,马上结帐,要不然谁还会帮你解决问题呢!
zhizhi_2008 2008-11-02
  • 打赏
  • 举报
回复
上面的程序主要错在:
一、DOS的21H中断的09H功能中的字符串要于‘$’结尾。
改成 STRING DB 20 DUP(?), ‘$’

二、COUNT不对,应该是 COUNT EQU STRING - BCD 这样得到的才是BCD的长度。

哈,我试过的了,按我说的没错的,给分我吧。

21,500

社区成员

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

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