版权声明:本文为 gfson
原创文章,转载请注明出处。
注:作者水平有限,文中如有不恰当之处,请予以指正,万分感谢。
14.1 概述
14.2 in 和 out
- 端口的读写指令只有 in 和 out,分别用于从端口读取数据和往端口写入数据。
- 在 in 和 out 指令中,只能用 ax 或 al 存放从端口中读入的数据或要发送到端口中的数据。
- 访问 8 位端口时用 al,访问 16 位端口时用 ax。
14.3 检测点 14.1
- 答案:
(1)
mov al, 2
out 70h, 2
in al, 71h
(2)
mov al, 2
out 70h, 2
mov al, 0
out 71h, al
14.4 shl 和 shr 指令
- shl 是逻辑左移指令。
- shr 是逻辑右移指令。
14.5 检测点 14.2
- 答案:
mov bx, ax
shl ax, 1
mov cl, 3
shl bx, cx
add ax, bx
14.6 实验 14
- 答案:
assume cs:code, ds:data
data segment
s db 9, 8, 7, 4, 2, 0
data ends
code segment
start: mov ax, 0b800h
mov es, ax
mov di, 160 * 12
mov ax, data
mov ds, ax
mov si, 0
mov cx, 6
print: mov al, s[si]
out 70h, al
in al, 71h
call number
cmp si, 2
jb slash
je space
cmp si, 5
jb colon
next: inc si
loop print
mov ax, 4c00h
int 21h
;al->number, es:di->begin
number: push cx
mov ah, al
mov cl, 4
shr ah, cl
and al, 00001111b
add ah, 30h
add al, 30h
mov byte ptr es:[di], ah
mov byte ptr es:[di + 2], al
add di, 4
pop cx
ret
slash: mov byte ptr es:[di], '\'
add di, 2
jmp next
colon: mov byte ptr es:[di], ':'
add di, 2
jmp next
space: mov byte ptr es:[di], ' '
add di, 2
jmp next
code ends
end start
网友评论