炒饭 发表于 2012-7-21 15:34:19

In 和out 还是不懂

in 是写入端口   
out 是写出端口
那么端口是不是相当与地址?
外设都是从这同一地址获取数据的吗?

第68课:显示月份代码中
mov al,8               ;8是数据,
out 70h,al            ;将8写入端口70h,不是地址?写入70h端口这行有什么用
in al,71h            ;是将数据8写出端口到al寄存器中吗?这行有什么用

看完这节不懂,,求帮忙

炒饭 发表于 2012-7-21 15:37:06

显示 月份 代码
code segment
start:
   mov al,8
   out70h,al
   in al,71h
   mov ah,al
   mov cl,4
   shr ah,cl
   and al,00001111b
.............................

炒饭 发表于 2012-7-21 15:46:44

本帖最后由 炒饭 于 2012-7-22 00:17 编辑

就这一端口,外设又怎么访问, 那么想多次读取,又是怎样的原理
70端口进去的数,怎样在71端口读取

看了资料后out 70h,al   ;写入要访问的地址
                   in al,71h   ;取出访问地址中的值

那么又有一问题,怎么往该地址中写入数据呢?

XXXXXXX 发表于 2012-7-22 14:36:39

炒饭 发表于 2012-7-21 15:46 static/image/common/back.gif
就这一端口,外设又怎么访问, 那么想多次读取,又是怎样的原理
70端口进去的数,怎样在71端口读取



out 70h,al      ;给70h端口地址
mov al,31h   ;al放写入的数据
out 71h,al       ;写入al,地址在70h那
(我也不很明白,in al,70h合法吗?)

三田学校 发表于 2012-8-4 23:11:52

端口70h用来存放地址单元,如8,
端口71h用来存放上面地址单元如8所对应的地址所存放的数据
这两个是配套的。
只要在端口70h给出了地址单元,则立马可以从端口71h中取出该地址单元对应的地址所存的数据
而端口的读写的话,都是用al

mov al,8               ;8号地址单元
out 70h,al            ;将8写入端口70h,会自动算出相应的地址,如xxxx,
in al,71h            ;取出地址xxxx所存放的一个字节数据到al中

mov al,0
out 71h,0         ;将0写入,即地址xxxx所对应的数据变为0
in al,71h            ;然后读取出地址xxxx所存放的一个字节数据到al中

三田学校 发表于 2012-8-4 23:13:14

附检测点14.1assume cs:code
code segment
        start:
                mov bx,0b800h
                mov es,bx
                mov si,160*12+78
               
                mov al,2
                out 70h,al
                in al,71h
               
                mov byte ptr es:,al
                mov byte ptr es:1,01110000b
               
                mov al,0
                out 71h,al
                in al,71h
               
                mov byte ptr es:2,al
                mov byte ptr es:3,01110000b
       
                mov ax,4c00h
                int 21h
code ends
end start
页: [1]
查看完整版本: In 和out 还是不懂