鱼C论坛

 找回密码
 立即注册
查看: 2764|回复: 3

[技术交流] 汇编实验14

[复制链接]
发表于 2020-8-27 17:57:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 sbx 于 2020-8-27 18:00 编辑

实验14;编程:在屏幕中间显示当前的/年/月/日/时/秒
程序一:
assume cs:code
code segment
s1:db 'yy/mm/dd hh:mm:ss'
s2:db 9,8,7,4,2,0

start:mov ax,cs
mov ds,ax
mov si,offset s2
mov di,0
mov cx,6
s:
push cx
mov al,[si]
out 70h,al                           ;将al送入端口70h
in al,71h                             ;从端口71h处读出单元内容

mov ah,al
mov cl,4
shr ah,cl              ;ah中为十位数码值
and al,00001111b             ;ah中为个位数码值

add ah,30h
add al,30h

mov bx,0b800h
mov es,bx
mov byte ptr es:[12*160+40*2+4],'/'
mov byte ptr es:[12*160+40*2+10],'/'
mov byte ptr es:[12*160+40*2+16],' '
mov byte ptr es:[12*160+40*2+22],':'
mov byte ptr es:[12*160+40*2+28],':'


cmp di,4
je n1
cmp di,10
je n1
cmp di,16
je n1
cmp di,22
je n1
cmp di,28
je n1
jmp short n2

n1:add di,2
n2:mov byte ptr es:[12*160+40*2+di],ah
add di,2
mov byte ptr es:[12*160+40*2+di],al
add di,2
inc si
pop cx
loop s

mov ax,4c00h
int 21h

code ends
end start
截图未命名10.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-16 11:31:48 | 显示全部楼层
assume cs:code,ds:data
data segment
db 'yy/mm/dd hh:mm:ss'
db 9,8,7,4,2,0
data ends

code segment
start:
mov ax,data
mov ds,ax
mov si,17
mov di,0

mov cx,6
s:push cx

mov al,[si]
out 70h,al
in al,71h

mov ah,al
mov cl,4
shr ah,cl
and al,00001111b

add ah,30h
add al,30h
mov [di],ah
mov [di+1],al

inc si
add di,3

pop cx
loop s

mov si,0

mov ax,0b800h
mov es,ax
mov di,12*160+32*2

mov cx,17
s1:mov al,[si]
mov es:[di],al
inc si
add di,2
loop s1

mov ax,4c00h
int 21h

code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-16 11:41:21 | 显示全部楼层
assume cs:code,ds:data
data segment
db 'yy/mm/dd hh:mm:ss','$'
db 9,8,7,4,2,0
data ends

code segment
start:
mov ax,data
mov ds,ax
mov si,18
mov di,0

mov cx,6
s:push cx

mov al,[si]
out 70h,al
in al,71h

mov ah,al
mov cl,4
shr ah,cl
and al,00001111b

add ah,30h
add al,30h
mov [di],ah
mov [di+1],al

inc si
add di,3

pop cx
loop s

mov ah,2
mov bh,0
mov dh,12
mov dl,32
int 10h

mov dx,0
mov ah,9
int 21h

mov ax,4c00h
int 21h

code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 21:18:10 | 显示全部楼层
assume cs:code,ds:data
data segment
time db 'yy/mm/dd hh:mm:ss','$'
cmos db 9,8,7,4,2,0
data ends

code segment
start:
mov ax,data
mov ds,ax

mov si,0
mov di,0

mov cx,6
s:push cx

mov al,cmos[si]
out 70h,al        ;将al送入地址端口70h

in al,71h         ;从数据端口71h处读出单元内容

;al分成两个表示BCD码值的数据al、ah
mov ah,al
mov cl,4           ;右移4位
shr ah,cl          ;十位的BCD码
and al,00001111b   ;个位的BCD码

add ah,30h         ;BCD码+30h=10进制数对应的ASCII码
add al,30h
mov time[di],ah    ;ASCII码写入time段
mov time[di+1],al  ;ASCII码写入time段

inc si
add di,3

pop cx
loop s

;名称:BIOS中断(int 10h)

;功能:(ah)=2置光标到屏幕指定位置、(ah)=9在光标位置显示字符

;参数:(al)=字符、(bh)=页数、(dh)=行号、(dl)=例号

;      (bl)=颜色属性、(cx)=字符重复个数

mov ah,2
mov bh,0
mov dh,12
mov dl,32
int 10h
;名称:DOS中断(int 21h)

;功能:(ah)=9显示用'$'结束的字符串、(ah)=4ch程序返回

;参数:ds:dx指向字符串、(al)=返回值

mov dx,offset time
mov ah,9
int 21h

;结束
mov ax,4c00h
int 21h

code ends
end start
截图未命名11.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 01:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表