注册 登录
编程论坛 汇编论坛

怎么年份输不出来 bl 部分报错~

y_l_y_ 发布于 2007-05-27 17:38, 2193 次点击
之前用了MOV AH,2AH
INT 21H

下面是打印年份的子程序
几个BL 的地方都报错了 为什么啊
SHOWYEAR PROC NEAR
MOV AX,CX ;2ah 之后年份在cx 里面
MOV CX,4 ;年份的四位数字 循环4次
NEXT1: DIV DW10 ;DW10是 word型的10。用AX/10
MOV BL,LOW DX ;将余数放到BL 里
ADD BL,30H ;将BL 转换成相应的ASCII码
PUSH BL ;BL进栈
LOOP NEXT1 ;循环4次
MOV CX,4
NEXT2: POP DL ;将栈顶元素弹出到DL 里
MOV AH,02H
INT 21H ;输出DL
LOOP NEXT2
RET
32 回复
#2
菜鸟上路2007-05-27 17:54

如果不影响前面程序的话,改成BX试试
SHOWYEAR PROC NEAR
MOV AX,CX ;2ah 之后年份在cx 里面
MOV CX,4 ;年份的四位数字 循环4次
NEXT1: DIV DW 10 ;DW10是 word型的10。用AX/10
MOV BX,DX ;将余数放到BL 里
ADD BX,30H ;将BL 转换成相应的ASCII码
PUSH BX ;BL进栈
LOOP NEXT1 ;循环4次
MOV CX,4
NEXT2: POP DX ;将栈顶元素弹出到DL 里
MOV AH,02H
INT 21H ;输出DL
LOOP NEXT2
RET

#3
y_l_y_2007-05-27 18:03
回复:(菜鸟上路)如果不影响前面程序的话,改成BX试...
我那个栈定义的是 DB 的啊
还需要放别的数呢~
只有本站会员才能查看附件,请 登录

#4
菜鸟上路2007-05-27 18:09
你这程序我这没报错呀
#5
y_l_y_2007-05-27 18:10
回复:(菜鸟上路)你这程序我这没报错呀
咦 。。。那你用的什么软件
#6
爱以走远2007-05-27 18:16
没错 不是吧
有3个
#7
y_l_y_2007-05-27 18:16
回复:(菜鸟上路)你这程序我这没报错呀
我这还是有错 说寄存器使用错误
非法长度
#8
爱以走远2007-05-27 18:16
没错 不是吧   3个错误
#9
y_l_y_2007-05-27 18:17
回复:(爱以走远)没错 不是吧 [em09] 有3个 ...
是有3个啊~~~怎么解决啊~~

我是低位的放到BL 里头 怎么位数还会有问题啊
#10
爱以走远2007-05-27 18:18
等哈  看看   
#11
爱以走远2007-05-27 18:19
对拉 你大慨是想完成什么功能
#12
y_l_y_2007-05-27 18:22
回复:(爱以走远)对拉 你大慨是想完成什么功能 ...
由键盘输入一个数 执行相应功能
0-退出
1-显示系统日期
2-显示系统时间
3-显示一些信息

0、3都没问题
2还没写主要代码

现在在试功能1

就是年份不知道怎么输出
#13
爱以走远2007-05-27 18:23
哦 我晓得拉
你在91的行 MOV BL,LOW DX
要加byte ptr
93 95 你在弹栈的时候 弹出的是字节 这样不行
在堆栈里 都是以字来放的 不能分开
#14
y_l_y_2007-05-27 18:25
回复:(爱以走远)哦 我晓得拉 你在91的行 M...
我91 的 是把 LOW DX 放进BL 的啊 是字 啊

#15
爱以走远2007-05-27 18:25
年份可以用字符串输入   行不哦
#16
y_l_y_2007-05-27 18:27
回复:(爱以走远)年份可以用字符串输入 行不哦
改了PTR 的也不行

要读出系统时间 不是输入的啊
#17
爱以走远2007-05-27 18:30
那你加错拉 dx 放到bl里 能行吗 前面是字 后面是字节
#18
爱以走远2007-05-27 18:31
以下是引用y_l_y_在2007-5-27 18:27:41的发言:


要读出系统时间 不是输入的啊

读系统时间 我还不晓得哈

#19
y_l_y_2007-05-27 18:34
回复:(爱以走远)以下是引用y_l_y_在2007-5-27 18:2...

DOS 的子程序功能
MOV AH,2AH
INT 21H

之后
cx:年(DW)
DH:月(DB)
dl:日(db)

问题是年份怎么打印输出?

#20
爱以走远2007-05-27 18:36
我说过嘛 你先放到一个存储单元
在以字符串的形式输出 这样应该可以哦
#21
y_l_y_2007-05-27 18:38
回复:(爱以走远)我说过嘛 你先放到一个存储单元...
字符串输出条件是 末尾要以'$'结尾啊
#22
爱以走远2007-05-27 18:39
你在最后加一个就是撒   
#23
y_l_y_2007-05-27 18:46
回复:(爱以走远)你在最后加一个就是撒

那意思是 先定义一个 temp dw 5 dup(?)

#24
y_l_y_2007-05-27 18:48
回复:(爱以走远)你在最后加一个就是撒

可是读系统时间的时候还是要先吧它转换成 一个一个的字符啊

#25
爱以走远2007-05-27 18:55
你定义db 就行拉嘛
temp db 10 dup(?)
db '$'
就这样
#26
y_l_y_2007-05-27 18:58
回复:(爱以走远)你定义db 就行拉嘛 temp db 1...
可是读系统时间的时候还是要先吧它转换成 一个一个的字符啊

我现在把那段显示年份的改成这样了

SHOWYEAR PROC NEAR
MOV AX,CX
MOV CX,4
NEXT1: DIV DW10
MOV WORD PTR TEMP,DX ;设了个临时的DB型的变量
ADD TEMP,30H
MOV BL,TEMP
PUSH BL ;出错
LOOP NEXT1
MOV CX,4
NEXT2: POP DL ;出错
MOV AH,02H
INT 21H
LOOP NEXT2
RET
SHOWYEAR ENDP
#27
y_l_y_2007-05-27 19:02
回复:(爱以走远)你定义db 就行拉嘛 temp db 1...
我定义完了调用的时候 是 用
lea si,temp
temp[si]
inc si吗
#28
爱以走远2007-05-27 19:10

不是
lea temp[bx],你想放的东西
inc bx
这样就行拉

#29
y_l_y_2007-05-27 19:17
回复:(爱以走远)不是 lea temp[bx],你想放的...
bx  不用先定义一下初始指向吗?
#30
y_l_y_2007-05-27 19:31
回复:(y_l_y_)回复:(爱以走远)你定义db 就行拉嘛...

那段改成这样了还报错啊
SHOWYEAR PROC NEAR
MOV AX,CX
MOV CX,4
MOV SI,0
NEXT1: DIV DW10
MOV WORD PTR TEMP,DX
ADD TEMP,30H
MOV BL,BYTE PTR TEMP
LEA TEMPSTRING[SI],BL
INC SI
LOOP NEXT1
MOV CX,4
NEXT2: LEA DX,TEMPSTRING ;出错
MOV AH,09H
INT 21H
RET
SHOWYEAR ENDP

#31
爱以走远2007-05-27 19:33
NEXT2: LEA DX,TEMPSTRING ;出错

好象没错 你前面的数据是temp 还是tempstring哦

bx 初值为0撒

好拉 去开班会去拉 你在慢慢看看
#32
y_l_y_2007-05-27 19:39
回复:(爱以走远)NEXT2: LEA DX,TEMPSTRING ...
有一个单独的 temp

还有一个缓冲的TEMPSTRING 撒~

谢谢啊~~
#33
菜鸟上路2007-05-27 19:55

用Win-Masm没报错

1