匯編語言(王爽)第七章與實驗6


第七章 更靈活的定位內存地址的方法

7.1 and和or指令

(1)and/or指令:按位的運算符。不能對內存單元直接操作,須借助寄存器中轉。

(2)and/or指令的應用:

因為不管1還是0,和1進行與運算,都能維持原數不變;與1進行或運算,都能使原數置1.

和0進行與運算,都能置0;和0進行或運算,都能維持原數不變。

可利用上述特點,進行一些應用,比如轉換大小寫字母。

一個字母的大寫ASCII碼都比小寫ASCII碼值小20H。比如A是41H,a是61H。

對應二進制碼分別為0100 0001H,0110 0001H.

如果要將A轉成a,直接用A+20H就可以。

但如果有一個字母,事先不知道其是大寫還是小寫,但如果要將其轉成小寫,該怎么處理?

顯然不能用+20H的方法。注意到對於一個字母的大小寫的區別還在於:0~7位上的第5位如果是1,則為小寫,如果為0,則為大寫。也就是說不管其第5位如何,將其轉為1,並保持其他位的數值不變,都可以得到小寫。

則可以通過or  原數,0010 0000B 進行轉換。

同理,小寫轉成大寫,則可以通過  and 1101 1111B進行轉換。

7.5[bx+idata]的尋址形式:表示偏移地址=(bx)+idata;

這種尋址形式也可以表示為[idata+bx],idata[bx],[bx].idata

7.8[bx+si]和[bx+di]:偏移地址=(bx)+(si)/(di)

這里si和di也為16位寄存器,但他們不能分割成8位寄存器使用。

這種尋址形式也可以表示為[bx][si]/[bx][di]。

7.9[bx+si+idata]和[bx+di+idata]:表示偏移地址=(bx)+(si)/(di)+idata。

這種尋址形式也可以表示為:[bx+200+si],[200+bx+si],200[bx][si],[bx].200[si],[bx][si].200。

 

實驗6:編程,將datasg段中每個單詞的前5個字母改成大寫字母。

assume cs:codesg,ds:datasg,ss:stacksg
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,datasg
    mov ds,ax
    mov si,0
    mov cx,5
s0:
    push cx
    mov bx,0
    mov cx,4
s1:
    mov al,[bx][si].3
    and al,11011111B
    mov [bx][si].3,al
    add bx,10h
    loop s1

    inc si
    pop cx
    loop s0

    mov ax,4c00h
    int 21h

codesg ends
end start

    

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM