汇编语言习题十四

检测点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
原创文章 182 获赞 29 访问量 2万+

猜你喜欢

转载自blog.csdn.net/treblez/article/details/105765307