急!!国防科大自考汇编实验题目解决方法(完成填空)

PZL99COM 2007-08-05 02:15:37
;*********************************************************************
;实验题目:制作电子钟
;原理:利用定时器产生的中断信号作为时钟计数值,制作一个电子钟,(XX分XX秒)
;要求:(1)看懂参考程序的流程,理解关键语句部分的作用.
; (2)参考程序中没有保存和恢复中断向量的入口值,程序退出后,系统死机,
; 请在适当位置添加相应语句,保证程序退出后,系统正常,保存中断向量
; 入口值语句位置已指出,恢复部分请自己确定适当位置.
;*********************************************************************


data segment para public'data'
count100 db 100
tenmin db 0
minute db 0
db':'
tensec db 0
second db 0
data ends

stack segment para stack'stack'
db 256 dup(?)
stack ends

code segment para public'code'

start proc far
assume cs:code

push ds
sub ax,ax
push ax

mov ax,data
mov es,ax
assume es:data
mov si,82h
mov di,offset tenmin
mov cx,5
cld
rep movsb ;取命令行参数

mov ds,ax
assume ds:data

mov ah,0
mov al,1
int 10h

mov ah,2
mov dh,10
mov dl,20
int 10h

mov ah,9
mov al,' '
mov bl,2eh
mov cx,5
int 10h

mov ah,2
mov dh,10
mov dl,20
int 10h

mov ah,0
int 16h

cli
;************************************
;在此处完成填空,保存中断向量入口值,
;并且接管中断处理
;************************************





sti

cli
mov al,36h
out 43h,al
mov bx,11932
mov al,bl
out 40h,al
mov al,bh
out 40h,al
mov al,bh
out 40h,al
mov al,0bch
out 21h,al
sti ;初始化定时器8253

forever: mov ah,2
mov dh,10
mov dl,20
int 10h
mov bx,offset tenmin
mov cx,5
dispclk: mov al,[bx]
call dispchar
inc bx
loop dispclk
mov al,second
waitl: cmp al,second
jz waitl
mov ah,1
int 16h
jnz ppp
mov al,7
mov ah,14
int 10h
jmp forever
ppp: jmp rrr

timer proc far
push ax
dec count100
jnz timerx
mov count100,100
inc second
cmp second,'9'
jle timerx
mov second,'0'
inc tensec
cmp tensec,'6'
jl timerx
mov tensec,'0'
inc minute
cmp minute,'9'
jle timerx
mov minute,'0'
inc tenmin
cmp tenmin,'6'
jl timerx
mov tenmin,'0'
timerx: mov al,20h
out 20h,al
pop ax
iret
timer endp ;中断处理程序

dispchar proc near
push bx
mov bx,0
mov ah,14
int 10h
pop bx
ret
dispchar endp ;字符显示过程

rrr: ret
start endp

code ends
end start

;此源代码我编译连接成功,但时钟没起作用.
...全文
379 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
heavenscloud 2007-08-09
  • 打赏
  • 举报
回复
哦牙~~X86汇编忘记的差不多鸟
  • 打赏
  • 举报
回复

data segment para public 'data'
count100 db 100
tenmin db '0'
minute db '0'
db ':'
tensec db '0'
second db '0'
int08save dd 0
data ends

stack segment para stack 'stack'
db 256 dup(0)
stack ends

code segment para public 'code'

start proc far
assume cs:code, ds:data, ss:stack

push ds
sub ax,ax
push ax

mov ax,data
mov ds,ax

mov ah,0
mov al,1
int 10h

mov ah,2
mov dh,10
mov dl,20
int 10h

mov ah,9
mov al,' '
mov bx,002eh
mov cx,5
int 10h

mov ah,2
mov dh,10
mov dl,20
int 10h

;mov ah,0
;int 16h

cli
;************************************
;在此处完成填空,保存中断向量入口值,
;并且接管中断处理
;************************************
mov ax,3508h
int 21h
mov word ptr int08save,bx
mov word ptr int08save+2,es
push ds
mov ax,2508h
push cs
pop ds
lea dx,timer
int 21h
pop ds
sti

cli
mov al,36h
out 43h,al
mov bx,11932
mov al,bl
out 40h,al
mov al,bh
out 40h,al
mov al,bh
out 40h,al
mov al,0bch
out 21h,al
sti ;初始化定时器8253

forever:
mov ah,2
mov dh,10
mov dl,20
int 10h
mov bx,offset tenmin
mov cx,5
dispclk:
mov al,[bx]
call dispchar
inc bx
loop dispclk
mov al,second
waitl:
cmp al,second
jz waitl
mov ah,1
int 16h
jnz ppp
mov al,7
mov ah,14
int 10h
jmp forever
ppp:
jmp rrr

timer proc far
push ds
push ax
mov ax,data
mov ds,ax
pushf
call dword ptr [int08save]
dec count100
jnz timerx
mov count100,100
inc second
cmp second,'9'
jle timerx
mov second,'0'
inc tensec
cmp tensec,'6'
jl timerx
mov tensec,'0'
inc minute
cmp minute,'9'
jle timerx
mov minute,'0'
inc tenmin
cmp tenmin,'6'
jl timerx
mov tenmin,'0'
timerx:
mov al,20h
out 20h,al
pop ax
pop ds
iret
timer endp ;中断处理程序

dispchar proc near
push bx
mov bx,0
mov ah,14
int 10h
pop bx
ret
dispchar endp ;字符显示过程

rrr: ; 如果要求结束后系统死机,下面7行注释掉即可
mov ax,2508h
lds dx,int08save
int 21h
mov ax,3
int 10h
mov ax,4c00h
int 21h
ret
start endp

code ends
end start
zara 2007-08-09
  • 打赏
  • 举报
回复
可是, 按照题目的要求, 应该有实时时钟中断 timer 来对 second 进行修改的啊
paullbm 2007-08-09
  • 打赏
  • 举报
回复
mov al,second
waitl: cmp al,second
jz waitl


假设second=5,那al也等于5,两个相同的数进行比较,当然符合jz(等于0则跳转)的条件了!
al是用原始数second赋值的,但仍和这个原始数进行比较,当然是只可能相等了!!
zara 2007-08-09
  • 打赏
  • 举报
回复
是 jz 指令, 不是 jmp 指令, 不会形成死循环的吧.
paullbm 2007-08-09
  • 打赏
  • 举报
回复
mov al,second
waitl: cmp al,second
jz waitl


子程序forever中的这几句岂不是造成了死循环??
源码下载地址: https://pan.quark.cn/s/40677b766bda "ContextCapture 倾斜摄影快速、创新及全面空三建模与单机集群硬件部署方案2018" 此资源聚焦于倾斜摄影(ContextCapture)空三建模及单机集群硬件部署方案,致力于为用户呈现最快、最优成本效益的台式工作站、移动工作站、并行集群的多样化部署选择。以下是该资源的详细知识点概述: 一、相关设备型号说明 * UltraLAB 是西安坤隆计算机科技有限公司推出的专属图形工作站品牌,具备三大卓越优势:顶尖的计算硬件架构、精准的行业应用定制服务、专业的硬件系统优化工艺。 二、硬件部署方案 * 台式工作站部署建议:设备特色在于当前市场上最快的台式计算架构,适用于办公场景下,部门层级常规的倾斜摄影空三处理、三维建模。 * 便携式工作站部署建议:设备特色在于当前市场上最快的移动计算架构,适用于移动倾斜摄影的空三处理、三维建模工作站。 * 大数据量处理工作站推荐:设备特色在于极限自动超频加速与16个并行存储构造,具备空三处理和三维建模最强的计算性能及海量高速并行存储性能。 * 多设备并行计算集群部署建议:针对海量图像数据计算产生的巨大需求,单机计算能力处理时间过长,效率不高,通过多台机器并行集群,进行空三处理、三维建模,显著减少处理时间。 三、部署方案深入解析 * 2.1 倾斜摄影建模(台式工作站)部署方案:设备特色在于最高的计算处理能力~6核5.2GHz,内存最大配置可达64GB,配备最新图灵架构的RTX显卡,相比市场其他品牌机器(单CPU、双Xeon处理器)更快、更具成本效益。 * 2.2 倾斜摄影建模(移动便携式工作站)硬件部署方案:设备特色在于最高的计算处理能力~6...

21,500

社区成员

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

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