检测点14.1
(1)
mov al,2 ;将2送入al,声明端口将要被通信
out 70h,al ;向70h端口中写入al的值
in al,71h ;从71端口中读出数据放到al中
(2)
从这里我们可以看出,out 70h,al像是一个调用声明,表示要调用哪一个端口,然后再通过71H in就是读出,out就是写入
assume cs:code
code segment
start: mov al,2
out 70h,al ; ① 要访问的CMOS RAM单元地址为 (al)=2
mov al,0
out 71H,al ; ② 写入数据到选定的CMOS RAM单元地址
mov ax,4c00H
int 21H
code ends
end start
检测点14.2
mov bx,ax ;先将ax送入bx保存
mov cl,3 ;移位位数大于1,用cl保存
shl ax,cl ;将ax左移3位
shl bx,1 ;将bx左移1位
add ax,bx ;将二者相加送入ax中,即为(ax)=(ax)*10
实验十四
代码来自老梧桐https://www.cnblogs.com/tsembrace/p/3309327.html
assume cs:code,ds:data,es:info_num
data segment
db '11/11/11 11:11:11$' ;预设字符串
data ends
info_num segment
db 9,8,7,4,2,0 ;端口时间地址列表
info_num ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0 ;ax:si初始指向字符串首
mov ax,info_num
mov es,ax
mov bp,0 ;指向端口时间地址列表首
mov cx,6
s:
push cx
mov al,es:[bp]
out 70h,al
in al,71h
mov ah,al ;暂存al
mov cl,4
shr ah,cl ;获取BCD码高四位
and al,00001111B ;获取BCD码低四位
add al,30h
add ah,30h
mov ds:[si],ah
mov ds:[si+1],al ;将时间信息写入字符串指定位置
add si,3 ;指向字符串下一写入位置
inc bp ;指向端口时间地址列表下一位置
pop cx
loop s
mov ah,2
mov bh,0
mov dh,12
mov dl,50
int 10h ;调用系统BIOS中断例程设置光标位置
mov ah,9
mov dx,0 ;指向字符串首
int 21h ;调用DOS中断例程显示字符串
mov ah,2
mov bh,0
mov dh,24
mov dl,0
int 10h ;重置光标位置
mov ax,4c00h
int 21h
code ends
end start