日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编常用寄存器

發布時間:2024/8/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编常用寄存器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文索引

      • 一、數據寄存器(AX、BX、CX、DX寄存器)
      • 二、變址寄存器(SI寄存器、DI寄存器)
      • 三、指針寄存器(BP寄存器、SP寄存器)
      • 四、段寄存器(DS寄存器、ES寄存器)


????????匯編寄存器主要分兩類,通用寄存器特殊功能寄存器
????????通用寄存器可用于傳送和暫存數據,也可參與算術邏輯運算,保存運算結果。除此之外,它們還各自具有一些特殊功能。通用寄存器的長度取決于機器字長,匯編語言程序員必須熟悉每個寄存器的一般用途和特殊用途,只有這樣,才能在程序中做到正確、合理地使用它們。16位cpu通用寄存器共有8個:AX、BX、CX、DX、BP、SP、SI、DI。32位cpu通用寄存器共有8個: EAX、EBX、ECX、EDX、EBP、ESP、ESI、EDI功能和16位CPU差不多。

一、數據寄存器(AX、BX、CX、DX寄存器)

????????AX、BX、CX、DX可以稱作數據寄存器,這4個16位寄存器又可分別分成高8位(AH、BH、CH、DH)和低8位(AL、BL、CL、DL)。因此它們既可作為4個16位數據寄存器使用,也可作為8個8位數據寄存器使用。在編程時可存放源操作數、目的操作數或運算結果。數據寄存器是存放操作數、運算結果和運算的中間結果,以減少訪問存儲器的次數,或者存放從存儲器讀取的數據以及寫入存儲器的數據的寄存器。

  • AX(accumulator)累加器。是算術運算的主要寄存器。在乘、除等指令中指定用來存放操作數,以及所有的 I/O指令都使用這一寄存器與外部設備傳送信息。
  • BX(base)基址寄存器。常做存放地址使用。
  • CX(count)計數器。常用來保存計數值,如在循環、位移和串處理指令中作隱含計數器。
  • DX(data)數據。一般在作雙字長運算時把DX和AX組合在一起存放一個雙字長數,DX用來存放高位數。對于某些I/O操作,DX可用來存放I/O的端口地址。

上述寄存器均可用作通用寄存器。

二、變址寄存器(SI寄存器、DI寄存器)

????????SI是源變址寄存器,DI是目的變址寄存器。一般用來存放地址偏移,也可以用來存放數據。但需要注意的是:在串處理指令中,SI用作隱含的源串地址,默認在DS中;DI用做隱含的目的串地址,默認在ES中;此時不能混用。

mov ax,1000H mov ds,ax mov si,2 mov ax,[si] ! ds:si = 1000H + 2

即把ds偏移2位置數據取出賦值給ax。

三、指針寄存器(BP寄存器、SP寄存器)

  • SP(stack pointer)堆棧寄存器,SP寄存器存放棧的偏移地址。
  • BP(base pointer)基數指針寄存器BP,它的用途有點特殊,需和堆棧指針SP聯合使用的,作為SP校準使用的,只有在尋找堆棧里的數據和使用個別的尋址方式時候才能用到。比如說,堆棧中壓入了很多數據或者地址,你肯定想通過SP來訪問這些數據或者地址,但SP是要指向棧頂的,是不能隨便亂改的,這時候你就需要使用BP,把SP的值傳遞給BP,通過BP來尋找堆棧里數據或者地址.

BP作為基址寄存器,一般在函數中用來保存進入函數時的SP的棧頂基址。
每次子函數調用時,系統在開始時都會保存這個兩個指針并在函數結束時恢復SP和BP的值。

在函數進入時: push bp !! 保存BP指針 mov bp,sp !! 將SP指針傳給BP,此時BP指向SP的基地址。!! 這個時候,如果該函數有參數,則[bp + 2*4]是該子函數的第一個參數;!! [bp+3*4]是該子函數的第二個參數,以此類推,有多少個參數則[bp+(n-1)*4]..... ..... 函數結束時: mov sp,bp !! 將原sp指針傳回給sp pop bp !! 恢復原bp的值。 ret !! 退出子函數

四、段寄存器(DS寄存器、ES寄存器)

????????DS(Data Segment)和 ES(Extra Segment)都屬于段寄存器,用于存放的就是某個段地址。

下面看一個介紹使用 DS 寄存器的 Demo:

ASSUME CS:CODESCODES SEGMENTSTART:MOV AX,1000HMOV DS,AXMOV AL,1MOV BX,0MOV CX,5 ;設計一個循環,讓其循環 5 次s: MOV [BX],AL ;這里 [BX] = (DS:BX)INC ALINC BXLOOP s MOV AH,4CHINT 21H CODES ENDSEND START

上面的代碼所做的事情,就是通過循環將 1,2,3,4,5 寫入到地址(1000H:0000H)、(1000H:0001H)、(1000H:0002H)、(1000H:0003H)、(1000H:0004H)。

注:CPU不支持直接將立即數送入段寄存器中,如下操作方式不合法:

MOV DS,1000H !! 非法操作

總結

以上是生活随笔為你收集整理的汇编常用寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。