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

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

7.1 and 和 or 指令

7.2 大小寫轉換問題

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

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

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

7.3 SI 和 DI

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

7.4 不同尋址方式的靈活應用

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

7.5 實驗 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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容