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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

汇编常用寄存器

發(fā)布時(shí)間:2024/8/1 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编常用寄存器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文索引

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


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

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

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

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

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

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

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

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

即把ds偏移2位置數(shù)據(jù)取出賦值給ax。

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

  • SP(stack pointer)堆棧寄存器,SP寄存器存放棧的偏移地址。
  • BP(base pointer)基數(shù)指針寄存器BP,它的用途有點(diǎn)特殊,需和堆棧指針SP聯(lián)合使用的,作為SP校準(zhǔn)使用的,只有在尋找堆棧里的數(shù)據(jù)和使用個(gè)別的尋址方式時(shí)候才能用到。比如說(shuō),堆棧中壓入了很多數(shù)據(jù)或者地址,你肯定想通過(guò)SP來(lái)訪問(wèn)這些數(shù)據(jù)或者地址,但SP是要指向棧頂?shù)?#xff0c;是不能隨便亂改的,這時(shí)候你就需要使用BP,把SP的值傳遞給BP,通過(guò)BP來(lái)尋找堆棧里數(shù)據(jù)或者地址.

BP作為基址寄存器,一般在函數(shù)中用來(lái)保存進(jìn)入函數(shù)時(shí)的SP的棧頂基址。
每次子函數(shù)調(diào)用時(shí),系統(tǒng)在開(kāi)始時(shí)都會(huì)保存這個(gè)兩個(gè)指針并在函數(shù)結(jié)束時(shí)恢復(fù)SP和BP的值。

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

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

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

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

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

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

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

MOV DS,1000H !! 非法操作

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。