8086提供的一些指令詳解(一)

2021-07-23 08:21:39 字數 1578 閱讀 5155

今天我直接系統的介紹一些8086指令用法,以便以後更好地讀懂程式。能夠寫些簡單的程式。

一、傳送指令mov

解釋一下:mem(主存),imm(立即數),reg(暫存器),seg(段暫存器),dst(目的運算元),src(源運算元)。(以後都這樣)。

mov dst,src             ;就是將(src)->dst。

例如:mov al,4        ;將十進位制4,轉換成的16的4,然後放到暫存器al裡面,(預設數字後面不加說明就是十進位制數數字)                  ;(分號在組合語言裡面是注釋)。

mov si,200h

mov al,『1』       ;將1所代表的ascii放到al中。

注意:①兩個運算元型別要一致。(就是16位的數傳給16位,8位的數傳給8位)

②兩個運算元不能都是mem。(原因:訪問主存太慢了,你竟然乙個命令要訪問兩次,當然不行)

③段暫存器操作的限制

不允許立即數傳送給暫存器

不允許直接改變cs的值

不允許段暫存器之間直接資料傳送。

二、堆疊操作指令push/pop

一開始sp是指向高位址的,然後每壓進去乙個字,就sp=(sp)-2,向地位址方向伸展,壓棧和出棧只能是字,沒有位元組,所以sp要麼加2,,要麼減2。理解棧這邊很簡單,你們看我之前寫的8086提供的棧機制部落格就能理解,這裡不在重複。

三、交換指令xchg

下面我們來看一下交換嘛,只能是暫存器和暫存器或暫存器和主存之間交換。xchg dst,src    ;(dst)(src)

例如:xchg ax,[2000h]            ;就是將ax暫存器裡面的值和偏移位址位2000h的主存字單元內容互換

四、輸入/輸出指令 in/out

當是乙個位元組時可以用直接定址或暫存器間接定址,但如果是乙個字的話,只能是暫存器間接定址,也就是說,直接定址只能是8位資料。

下面舉幾個例子,大家根據注釋理解一下即可

1)直接定址

in  al,50h     ;將50h埠的位元組讀入al中

in  ax,70h     ;將70h、71h兩端口的值讀入ax,70埠的值讀入al,71h埠的值讀入ah

out 80h,ax  ;將ax中的內容輸出到80h、81h埠

2)暫存器間接定址

埠號必須設在暫存器dx中,現假設dx暫存器中為80h

in al,dx     ;從dx所指的埠80h中讀取1個位元組

in ax,dx     ;從兩端口中讀取1個位元組送到ax中,80h中的值送al,81h中的值送ah

out dx,ax  ;將ax中的字輸出到80h、81h埠。

提供ClearQuest的一些資料

昨天終於把clearquest安裝起來了,按照配置手冊進行了配置,基本上可以使用了,為此把我在網上蒐集的幾份比較有用的資料發布一下,有興趣的朋友也可以看看 clearquest安裝手冊 http files.cnblogs.com tintown rationalclearquest anzhuan...

Linux一些指令

date 檢視日曆 cal 輸出 檢視命令 顯示輸入的內容 echo 顯示文字檔案內容 cat 翻頁顯示檔案內容 只能向下翻頁 more 翻頁顯示檔案內容 帶上下翻頁 less 顯示檔案的頭幾行 預設10行 head n 指定顯示的行數 顯示檔案的末尾幾行 預設10行 tail n f追蹤顯示檔案更...

docker 一些指令

docker run it tomcat 7.0.68 jre8 bin bash 進入容器 root iz25ljx2ojuz command cat create.sh bin bash docker create v logs logs v dockertmp skywalker api sk...