80X86上时钟显示程序问题

LEE_coding 2008-11-01 11:32:13
杨季文汇编书上194页的一个例子,我运行后跳出MESSAGEBOX提示指令错误

这是代码


COUNT_VAL = 18
DPAGE =0
ROW =0
COLUMN =80-BUFF_LEN
COLOR = 07H


CODE SEGMENT
COUNT DW COUNT_VAL
HHHH DB ?,?,':'
MMMM DB ?,?,':'
SSSS DB ?,?
BUFF_LEN =$ - OFFSET HHHH
CURSOR DW ?
ASSUME CS:CODE,DS:CODE

NEWCH:
CMP CS:COUNT,0
JZ NEXT
DEC CS:COUNT
IRET

NEXT: MOV CS:COUNT,COUNT_VAL
STI
push ds
push es
push ax
push bx
push cx
push dx
push bp



push cs
pop ds
pop es
call get_t

mov bh,DPAGE
mov ah,03h
int 10h
mov CURSOR,dx

mov al,0
mov bh,DPAGE
mov bl,COLOR
mov cx,BUFF_LEN
mov dh,ROW
mov dl,COLUMN
lea bp,HHHH
mov ah,13h
int 10h

mov bh,DPAGE
mov dx,CURSOR
mov ah,02h
int 21h

pop bp
pop dx
pop cx
pop bx
pop ax
pop es
pop ds

iret
get_t proc
mov ah,02h
int 1ah

mov al,ch
call ttasc
xchg ah,al
mov WORD ptr HHHH,ax
mov al,cl
call ttasc
xchg ah,al
mov WORD ptr MMMM,ax
mov al,dh
call ttasc
xchg ah,al
mov WORD ptr SSSS,ax
ret
get_t endp

ttasc proc
push cx
mov ah,al
and al,0fh
mov cl,4
shr ah,cl
add ax,3030h
pop cx
ret
ttasc endp

OLDCH1 DD ?
START:PUSH CS
POP DS

MOV AL,1CH
MOV AH,35H
INT 21H

MOV WORD ptr OLDCH1,BX
MOV WORD ptr OLDCH1 +2 ,ES

MOV DX,offset NEWCH
MOV AL,1CH
MOV AH,25H
INT 21H



MOV AH,0;键盘等待,等待时钟中断
INT 16H



LDS DX,OLDCH1
MOV AL,1CH
MOV AH,25H
INT 21H

MOV AH,4CH
INT 21H


CODE ENDS
END START

请帮忙看看,调了很久了,也不知道哪里错了






























...全文
118 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ufofind 2008-12-20
  • 打赏
  • 举报
回复
我看了王爽的
写了一个
assume cs:code
code segment
time:out 70h,al
in al,71h
mov bl,al
mov cl,4
shr bl,cl
shl al,cl
shr al,cl
add bl,30h
add al,30h
mov es:[di],bl
mov es:[di+2],al
ret
start:mov ax,0b800h
mov es,ax
mov di,160*23
mov al,4
call time
mov byte ptr es:[di+4],':'
mov al,2
mov di,160*23+6
call time
mov byte ptr es:[di+4],':'
mov al,0
mov di,160*23+12
call time
mov cx,0
jcxz start
mov ax,4c00h
int 21h
code ends
end start
LEE_coding 2008-11-01
  • 打赏
  • 举报
回复
不好意思,代码有点乱,CSDN怎么整理代码呢
BAYNPU 2008-11-01
  • 打赏
  • 举报
回复
看看吧:
COUNT_VAL = 18
DPAGE =0
ROW =0
COLUMN =80-BUFF_LEN
COLOR = 07H
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
COUNT DW COUNT_VAL
HHHH DB ?,?,':'
MMMM DB ?,?,':'
SSSS DB ?,?
BUFF_LEN =$ - OFFSET HHHH
CURSOR DW ?
NEWCH:
CMP CS:COUNT,0
JZ NEXT
DEC CS:COUNT
IRET
NEXT:
MOV CS:COUNT,COUNT_VAL
STI
push ds
push es
push ax
push bx
push cx
push dx
push bp
push cs
pop ds
push ds
pop es
call get_t
mov bh,DPAGE
mov ah,3
int 10h
mov CURSOR,dx
mov bp,offset hhhh
mov bh,DPAGE
mov dh,row
mov dl,column
mov bl,color
mov cx,buff_len
mov al,0
mov ah,13h
int 10h
mov bh,dpage
mov dx,cursor
mov ah,2
int 10h
pop bp
pop dx
pop cx
pop bx
pop ax
pop es
pop ds
iret
get_t proc
mov ah,02h
int 1ah
mov al,ch
call ttasc
xchg ah,al
mov WORD ptr HHHH,ax
mov al,cl
call ttasc
xchg ah,al
mov WORD ptr MMMM,ax
mov al,dh
call ttasc
xchg ah,al
mov WORD ptr SSSS,ax
ret
get_t endp
ttasc proc
push cx
mov ah,al
and al,0fh
mov cl,4
shr ah,cl
add ax,3030h
pop cx
ret
ttasc endp
OLDCH1 DD ?
START:PUSH CS
POP DS
MOV AL,1CH
MOV AH,35H
INT 21H
MOV WORD ptr OLDCH1,BX
MOV WORD ptr OLDCH1 +2 ,ES
MOV DX,offset NEWCH
MOV AL,1CH
MOV AH,25H
INT 21H
MOV AH,0;键盘等待,等待时钟中断
INT 16H
LDS DX,OLDCH1
MOV AL,1CH
MOV AH,25H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START


21,500

社区成员

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

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