汇编语言masm显示时间程序带详细注释
这里就不加什么内容了,都写在了程序注释里。刚学汇编三天,如果有写的不对的欢迎评论留言。。。
dosbox以及全部所需资源下载
迅雷云盘
链接:https://pan.xunlei.com/s/VN88xwhr4ThZJvpOUaNu8r36A1
提取码:h3ax
下载链接为一个masm.zip文件 内部包含
DOSBox0.74_3_win32_installer.exe
debug.exe
LINK.EXE
MASM.EXE
ML.EXE
DOSXNT.EXE
exe2bin.exe
其中 h.asm 文件内容为下文纯代码
编译运行方式为
在dosbox窗口界面 运行命令
mount c f:/文件解压路径
c:
masm h #然后敲三下回车
link h #然后敲三下回车
h #直接运行
masm 汇编语言 显示时间 程序及注释
DATAS SEGMENT
STRING DB 'TIME IS ','$' ;设置 string字符串 随便加逗号
;例 STRING DB 'TIME IS ',5,'d',12,'h','$' ;debug中用-d 0000 查看
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
NOP;不操作 命令整理
MOV AX,DATAS ;将DATAS中的数据移动到AX的地址下 相当于给AX赋值 下文同理
MOV DS,AX
LEA DX,STRING ;string的地址偏移存入DX
;例 DX=1357 则DH=13 DL=57 用DEBUG name.exe -r 可以查看到DX DS这些32位内存 但是看不到DH DL
;在debug中用-d 0000 可以看到string中的内容
MOV AH,9 ;设置 AX = 09xx
INT 21H ; 调用AH中的09H号命令 复制这一条百度会有使用说明
MOV AH,2CH
INT 21H ;2CH命令 将 时分秒 存入 CH CL DH
PUSH DX ;将DX放入堆栈中
MOV AL,CH
CALL DISPLAY;跳转到下文中的 DISPLAY 函数 用于将小时数转为ASCII码并显示
MOV AL,CL
CALL DISPLAY
POP AX ;从堆栈中取出一个数到AX中
PUSH AX
MOV AL,AH
CALL DISPLAY
POP AX
CALL DISPLAY
MOV AH,4CH
INT 21H
DISPLAY:
PUSH BP ;将BP放入堆栈
MOV BP,SP ;将命令指针存入BP
MOV AH,0 ;接下来转为ascii 码 属实看不懂 就直接拿来用了
MOV BL,10
DIV BL
ADD AX,3030H ; AX + 3030并将结果存入AX
PUSH AX ;将AX放入瓶子里 doge
MOV DL,AL
MOV AH,02
INT 21H
POP DX ;从瓶口取出并放在DX里 doge
MOV DL,DH
INT 21H ;调用 AH中的指令 此时仍为02H
MOV DL,":"
INT 21H
MOV SP,BP ;从BP恢复开始时的命令指针
POP BP ;将BP恢复 之前恢复BP操作没写 直接把DOSBOX卡死了 无法操作 只能关闭窗口
RET ;不懂 懒得百度了
CODES ENDS ;结束了
END START ;终于结束了