汇编程序调试:接收年月日信息并进行显示

作者&投稿:巢松 (若有异议请与网页底部的电邮联系)
求一电子时钟电路和汇编语言源程序,能实现年月日和时间的显示以及调~

cursor equ 45H
attrib equ 2fh
code segment
assume cs:code,ds:code
start:
jmp go
oldcur dw ?
OLD1C DW 2 DUP(?)
NEWINT1C:
PUSHF
CALL DWORD PTR CS:OLD1C
push ax
PUSH BX
PUSH CX
PUSH DX
XOR BH,BH
MOV AH,3
INT 10H
MOV CS:OLDCUR,DX
MOV AH,2
xor bh,bh
MOV DX,CURSOR
INT 10H
MOV AH,2; ;读取系统时钟
INT 1AH
PUSH DX
PUSH CX
POP BX
PUSH BX
CALL SHOWBYTE
CALL SHOWCOLON
POP BX
XCHG BH,BL
CALL SHOWBYTE
CALL SHOWCOLON
POP BX
CALL SHOWBYTE
MOV DX,CS:OLDCUR
MOV AH,2
XOR BH,BH
INT 10H
POP DX
POP CX
POP BX
POP AX
IRET
SHOWBYTE PROC NEAR
PUSH BX
MOV CL,4
MOV AL,BH
SHR AL,CL
ADD AL,30H
CALL SHOW
CALL CURMOVE
POP BX
MOV AL,BH
AND AL,0FH
ADD AL,30H
CALL SHOW
CALL CURMOVE
RET
SHOWBYTE ENDP
SHOWCOLON PROC NEAR
MOV AL,':'
CALL SHOW
CALL CURMOVE
RET
SHOWCOLON ENDP
CURMOVE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,3
MOV BH,0
INT 10H
INC DL
MOV AH,2
INT 10H
POP DX
POP CX
POP BX
POP AX
RET
CURMOVE ENDP
SHOW PROC NEAR
PUSH AX
PUSH BX
PUSH CX
MOV AH,09H
MOV BX,attrib
MOV CX,1
INT 10H
POP CX
POP BX
POP AX
RET
SHOW ENDP
GO:
PUSH CS
POP DS
MOV AX,351CH ;取中断向量
INT 21H
MOV OLD1C,BX; ;保存原中断向量
MOV BX,ES
MOV OLD1C+2,BX
MOV DX,OFFSET NEWINT1C; ;置新的中断向量
MOV AX,251CH
INT 21H
MOV DX,OFFSET GO
SUB DX,OFFSET START
MOV CL,4
SHR DX,CL
ADD DX,11H
MOV AX,3100H; ;结束并驻留
INT 21H
CODE ENDS
END START
-----------------------------------------------------------------------------------
cursor equ 45H ;定义显示位置
attrib equ 2fh ;定义时钟显示颜色,绿底白字
code segment
assume cs:code,ds:code
start:
jmp go ;转到程序预处理,设置中断并驻留
oldcur dw ? ;用于保存原来光标位置
OLD1C DW 2 DUP(?) ;用于保存原来的 int 1c 入口地址
NEWINT1C: ;新的 int 1c 入口
PUSHF ;标志压栈
CALL DWORD PTR CS:OLD1C ;调用原来的 int 1c 中断
push ax
PUSH BX
PUSH CX
PUSH DX
XOR BH,BH
MOV AH,3
INT 10H ;int10 子功能 03 取当前光标位置
MOV CS:OLDCUR,DX ;当前光标位置存入CS:OLDCUR
MOV AH,2
xor bh,bh
MOV DX,CURSOR ;DX=CURSOR=45h,表示光标定位在1 行70 列
INT 10H ;int10 子功能 02 设置光标位置
MOV AH,2
INT 1AH ;INT 1AH 子功能 02 读取系统时钟,返回CH/CL/DH=BCD码小时/BCD码分钟/BCD码秒
PUSH DX
PUSH CX
POP BX ;小时分钟数给BX
PUSH BX
CALL SHOWBYTE ;调用子程序显示小时,小时在bh中
CALL SHOWCOLON ;调用子程序显示时间分隔符 ":"
POP BX
XCHG BH,BL ;分钟给bh
CALL SHOWBYTE ;调用子程序显示分钟,bh是分钟数
CALL SHOWCOLON ;调用子程序显示时间分隔符 ":"
POP BX ;秒数给bh
CALL SHOWBYTE ;调用子程序显示秒数
MOV DX,CS:OLDCUR ;读取备份的光标位置
MOV AH,2
XOR BH,BH
INT 10H ;int10 子功能 02 还原原来的光标位置
POP DX
POP CX
POP BX
POP AX
IRET ;中断返回
SHOWBYTE PROC NEAR ;BCD值显示子程序,BCD值在BH中
PUSH BX ;压栈BX值,以防冲掉
MOV CL,4 ;以下代码BH中BCD十位值转ASCLL码
MOV AL,BH
SHR AL,CL
ADD AL,30H
CALL SHOW ;调用子程序显示AL,当前AL为时间值十位上的数值
CALL CURMOVE ;调用子程序后移光标
POP BX ;还原BX值
MOV AL,BH ;以下代码BH中BCD个位值转ASCLL码
AND AL,0FH
ADD AL,30H
CALL SHOW ;调用子程序显示AL,当前AL为时间值个位上的数值
CALL CURMOVE ;调用子程序后移光标
RET
SHOWBYTE ENDP
SHOWCOLON PROC NEAR ;显示字符 ":" 子程序,用于时间分隔符
MOV AL,':'
CALL SHOW ;调用子程序显示":"
CALL CURMOVE ;调用子程序后移光标
RET
SHOWCOLON ENDP
CURMOVE PROC NEAR ;光标后移子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,3
MOV BH,0
INT 10H ;取光标位置
INC DL ;光标列位置加1
MOV AH,2
INT 10H ;设光标位置
POP DX
POP CX
POP BX
POP AX
RET
CURMOVE ENDP
SHOW PROC NEAR ;显示一个ASCLL字符子程序,AL为所显字符
PUSH AX
PUSH BX
PUSH CX
MOV AH,09H
MOV BX,attrib ;BH/BL=字符背景色/字符颜色 ,attrib=2fh=绿底白字
MOV CX,1 ;显示个数 1
INT 10H ;int 10 子功能 09 显示一个字符
POP CX
POP BX
POP AX
RET
SHOW ENDP
GO:
PUSH CS
POP DS
MOV AX,351CH ;取时钟中断 int 1c中断原入口
INT 21H
MOV OLD1C,BX ;保存原中断向量
MOV BX,ES
MOV OLD1C+2,BX
MOV DX,OFFSET NEWINT1C ;设置新的时钟中断 int 1c 入口
MOV AX,251CH
INT 21H
MOV DX,OFFSET GO
SUB DX,OFFSET START ;计算驻留内存字节数
MOV CL,4
SHR DX,CL ;驻留内存值转换为节
ADD DX,11H ;内存数加psp 11节
MOV AX,3100H ;结束并驻留
INT 21H
CODE ENDS
END STAR

;--------------------------------
;朋友帮你完成了这个小程序,若有不懂的可以HI我的

;----------------------------------



;-----------------------------
;宏汇编
OUTPUT MACRO P
mov ax,00h
mov al,p
cbw
mov bl,0ah
div bl
mov bl,ah
add al,30h
mov dl,al
mov ah,02h
int 21h
add bl,30h
mov dl,bl
mov ah,02h
int 21h
ENDM
DISPLAY MACRO string ;显示函数
lea dx,string
mov ah,09h
int 21h
ENDM

;********************************数据段
data segment
string db 'The current time is: ','$'
crlf db 0ah,0dh,0ah,0dh,'$'
data ends
;*********************************
;*********************************代码段
code segment
assume ds:data,cs:code ;段对应关系的说明
main proc far ;far子程序调用时的参数
start:
push ds
sub ax,ax ;清零
push ax ;压栈
mov ax,data ;将数据传送入数据段
mov ds,ax
;*********************************
;主程序开始

mov ah,2ch ;第一次获取时间小时和分
int 21h
DISPLAY string
DISPLAY crlf
OUTPUT ch ;输出小时
mov dl,'h'
mov ah,02h
int 21h
OUTPUT cl ;输出分
mov ah,2ch
int 21h
mov dl,'m'
mov ah,02h ;第二次获取时间秒和百分秒
int 21h
mov bh,dl
OUTPUT dh ;输出秒
mov dl,'s'
mov ah,02h
int 21h
OUTPUT ch

ret ;返回(return)
main endp ;主函数结束
;********************************************
code ends ;代码段定义结束
end start

输入:

11/08/12

输出:
2012-11-08

是这样要求的吗?

什么都是浮云,进入我空间才是最实在,这里什么都有


用C语言函数编写求年月日的程序。我想知道我这个程序哪里错了,语法没有...
include <stdio.h>#include <math.h>int year(int year);int month(int month,int year);void main(){ int y,m,d,sum,i,n; printf("请输入年月日\\n"); scanf("%d%d%d",&y,&m,&d); y=year(y); sum=0; n=0;\/\/定义一个n,用于每个月份天数相加 for(i=1;i<m;i++) { ...

如何编写属于自己的Java \/ Scala的调试器
2. 连接JVMTI 类库.通过传递给被调试程序的代理路径命令行,同时指向类库所在硬盘上的位置,此时,JVM将会加载JVMTI类库。另外一种可行的方式是:将命令行参数追加到全局环境变量JAVA_TOOL_OPTIONS 后面,每个新的JVM会接收该变量,并且该变量的值会自动地追加到现存参数列表之后。3. 远程连接.还有一种...

如何采用c#编一个控制台应用程序,接收串口来的数据存入SQL Server数据...
这个要分2步来处理:1.是接收com口数据,并整理得到所需要的所有数据: Address,Humidity,Temperature,SoilMoisture,Voltage;2.数据库操作, 这里是insert数据.sql语句可以这样写:string strquery = String.Format("insert into table(Address,Humidity,Temperature,SoilMoisture,Voltage) values({0},{1},{2...

编程序上机调试运行程序(都要求用指针处理)。(1) 输入三个浮点数,按...
…呵呵……关于怎么学,我是这么过来的,每看一节书,做一节课后习题,其实初学主要还是学习语法和算法(解决问题的方法),多上机自己写程序,写不出来看答案的算法,自己再写一边,关键这个阶段还是积累为主,基本知识学好了,可以学深入编程,不过你需要有熟悉的语法,可以写一些小程序:学生成绩管理...

编写调试程序:从键盘输入一个任意大小的实数x,如果满足如下条_百度知 ...
include<stdio.h> include<math.h> int main(){ float x,y;printf("input x:\\n");scanf("%f",&x);if(x<=29.5&&x>=-29.5){y=sqrt(x*x);} else {y=x;} printf("x=%f,y=%f",x,y);}

在系统开发过程中,程序员直接执行的任务是编写程序和———。A系统设计...
在系统开发过程中,程序员直接执行的任务是编写程序和调试程序。程序员岗位职责:1、对项目经理负责,负责软件项目的详细设计、编码和内部测试的组织实施,对小型软件项目兼任系统分析工作,完成分配项目的实施和技术支持工作。2、协助项目经理和相关人员同客户进行沟通,保持良好的客户关系。3、参与需求调研、...

求大神帮忙啊,求atmega48编写串口程序,利用串口调试助手向atmega48发送...
UCSR0B =_BV(RXEN0)|_BV(TXEN0)|_BV(RXCIE0); \/\/接收与发送使能,接收与接收结束中断使能 UCSR0C=_BV(UCSZ01)|_BV(UCSZ00)|_BV(UPM01); \/\/8位数据位、1位停止位、偶校验 UBRR0L=(F_CPU\/BAUD\/16-1)%256; \/\/设置波特率 UBRR0H=(F_CPU\/BAUD\/16-1)\/256;} \/\/单...

不会调试程序
Eclipse的设置断点很简单的啊,在java视图下,直接在你要设置断点的那行的最左边,双击即可,右键也有这个选项的。调式 选择debug即可,自动进入debug视图,F6单步调式 [1]快捷键(F8)直接执行程序。[2]快捷键(F5)单步执行程序,遇到方法时进入。[3]快捷键(F6)单步执行程序,遇到方法时跳过。[4]...

如何编程序,说的详细一点,拜托了!!!
我的建议是:在自己编写程序,进行创造的过程中,借鉴前人程序中的思想方法——而不是整天处于复制粘贴的状态中。建议四:好习惯要从开始做起 所谓“不以善小而不为”,等坏习惯养成了,再改就困难了。因此,类似写程序要注意缩进、为变量和函数起有意义的名字、大小写的使用、行末分号的注意等等,要...

如何用c编写网页,使网页具有发送数据以及接收数据的功能
CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。传送给Web服务器的信息可以用各种格式,通常是以纯文本或者HTML文本的形式,这样我们就可以在命令行状态调试CGI程序,并且得到它们的输出。下面是一个简单的CGI程序,它将HTML中Form的信息直接输出到We b浏览器。include <stdio.h> include <stdib.h>...

广安区13468095140: 汇编程序如何调试 -
攸桂五粒: 在DOS的提示符下,可键入命令: C>DEBUG [X:]PATH][FILENAME[.EXE]] 其中: [X:] 指定驱动器,任选项,例如,C: [PATH] 为路径,任选项,例如,\MASM [FILENAME] 为被调试文件的名字,例如,SY 如用户键入文件名,则DOS将指定的文件装入存储器中,用户即可对其进行调试.如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试. 在DEBUG程序调入后,将出现提示符'-'就可用DEBUG命令来调试程序. 注意:DEBUG显示的数均以16进制数表示.

广安区13468095140: DOS中debug是什么命令???有什么用? -
攸桂五粒: 是为DOS提供的有力的侦错,跟踪程序运行,检查系统数据的工具程序,它是在字符界面下以单字符命令方式工作.要很好地使用它必须具备一定的汇编程序设计和硬件基本知识的能力,当然,它为汇编语言程序员提供了有效的调试手段,它的...

广安区13468095140: 汇编语言 简单的显示系统日期 程序代码加说明 -
攸桂五粒: ;--------------------------------;朋友帮你完成了这个小程序,若有不懂的可以HI我的;----------------------------------;-----------------------------;宏汇编 OUTPUT MACRO Pmov ax,00h mov al,p cbw mov bl,0ah div bl mov bl,ah add al,30h mov dl,al mov ah,02h ...

广安区13468095140: 编写汇编语言源程序,并完成调试
攸桂五粒: DATA SEGMENT LIST DW 5,12,13,15,16ORG 20H A1 DW 14DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,A1 MOV CX,LIST MOV BX,CX ADD BX,BX BEGIN: MOV DX,LIST[BX] CMP AX,DX JA LP MOV LIST[BX+2],DXLP1: SUB BX,2 LOOP BEGINLP: MOV LIST[BX+2],AX ADD LIST,1 MOV AX,4C00H INT 21HCODE ENDSEND START

广安区13468095140: 显示日期时间程序 汇编编程
攸桂五粒: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; // 继承JFrame类并实现ActionListener接口 public class SwingDemo extends JFrame implements ActionListener{ JButton b1; // 声明按钮对象 JLabel l1,l2; // 声明...

广安区13468095140: 按指定格式显示时间程序设计(汇编语言)
攸桂五粒: 注意打印字符串和回车的问题

广安区13468095140: 如何用debug调试汇编程序?? -
攸桂五粒: 简单的说: 进入debug 输入-r,显示cpu中各个寄存器的内容. 输入-a,然后可以输入你想测试的程序语句,输入完按回车 进入到- ,这个状态,然后输入t, -t的意思是单步执行,输入一次t执行一条语句,然后在输入r,查看cpu中各个寄存器内容是否有变化,然后再输入-t,再执行一条,再输入-r,查看cpu中各个寄存器内容是否有变化,……如此重复,知道你想测试的指令全部执行完. 输入-q退出debug.

广安区13468095140: C语言程序设计 万年历查询程序. -
攸桂五粒: 实验名称:万年历的查询及打印 【内容】:设计一个查询并打印万年历的程序. 【步骤】: 1. 画出程序流程图; 2. 编写程序; 3. 调试程序,对调试过程中出现的问题进行分析,找出错误的原因并予改正; 4. 写出通过调试并修改正确...

广安区13468095140: 汇编程序是怎么编译的? -
攸桂五粒: 先在记事本里输入代码后,再用汇编编译器编译. 具体过程如下: 1、编辑:用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM),如:LX.ASM; 2、汇编:用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.OBJ),格式如...

广安区13468095140: 怎么编译汇编语言程序?? -
攸桂五粒: 过程如下: 1、编辑:用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM),如:LX.ASM; 2、汇编:用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.OBJ),格式如下:MASM LX.ASM; 3、连接:用连接程序(LINK.EXE...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网