【匯編語言】第 7 章 更靈活的定位內(nèi)存地址的方法

版權(quán)聲明:本文為 gfson 原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處。
注:作者水平有限,文中如有不恰當(dāng)之處,請(qǐng)予以指正,萬分感謝。

7.1 and 和 or 指令

7.2 大小寫轉(zhuǎn)換問題

  • 字母的大寫字符和小寫字符對(duì)應(yīng)的 ASCII 碼表如下:
  • 通過對(duì)比,我們發(fā)現(xiàn):

    • 小寫字母的 ASCII 值比大寫字母的 ASCII 值大 20H。
    • 大 20H 以二進(jìn)制的方式體現(xiàn)在第 5 位為 1
  • 所以,可以使用 and 和 or 得到如下結(jié)論:

    • 大寫字母 or 00100000B,將大寫字母的第 5 位置為 1,變?yōu)樾懽帜?/strong>。
    • 小寫字母 and 11011111B,將小寫字母的第 5 位置為 0,變?yōu)榇髮懽帜?/strong>。

7.3 SI 和 DI

  • si 和 di 不能分成兩個(gè)八位寄存器使用
  • 其功能與 bx 相近。

7.4 不同尋址方式的靈活應(yīng)用

  • [idata] 用一個(gè)常量來表示地址,可用于直接定位一個(gè)內(nèi)存單元。
  • [bx] 用一個(gè)變量來表示內(nèi)存地址,可間接定位一個(gè)內(nèi)存單元。
  • [bx+idata] 用一個(gè)變量和常量表示地址,可在一個(gè)起始地址的基礎(chǔ)上用變量間接定位一個(gè)內(nèi)存單元。
  • [bx+si] 用兩個(gè)變量表示地址。
  • [bx+si+idata] 用兩個(gè)變量和一個(gè)常量表示地址。
  • 一般來說,在需要暫存數(shù)據(jù)時(shí),我們應(yīng)該使用棧

7.5 實(shí)驗(yàn) 6

  • 答案:
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start:
mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s0:
push cx
mov si,0
mov cx,4
s:
mov al,[bx+si+3]
and al,11011111b
mov [bx+si+3],al
inc si
loop s
add bx,16
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容