and指令:邏輯與指令,按位進行與操作
mov al,01100011b
and al,00111011b
執行後:al=00100011b
or指令:邏輯或指令,按位進行或運算
mov al,01100011b
or al,00111011b
執行後:al=01111011b
assume cs:code,ds:data
data segment
db 'unix' ;"db 75h,6eh,49h,58h"
db 'fork'
data ends
code segment
start:mov al,'a' ; "mov al,61h"
a的ascii碼為61h
mov bl,'b'
mov ax,4c00h
int 21h
code ends
endstart
將datasg中的第乙個字串轉化位大寫,第二個字串轉化為小寫。
assume cs:codesg,ds:datasg
datasg segment
db 'basic'
db 'information'
datasg ends
codesg segment
start:mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s: mov al,[bx] ;將ascii碼從ds:bx所指向的單元中取出。
and al,11011111b ;第五個位置變為0,成為大寫。
mov [bx],al
inc bx
loop s
mov bx,5
mov cx,11
s0: mov al,[bx]
or al,00100000b
mov [bx],al
inc bx
loop s0
mov ax,4c00h
int 21h
codesg ends
endstart
[bx+idata]表示乙個記憶體單元,它的偏移位址為(bx)+idata
mov ax,[bx+200] 數位化描述:(ax)=((ds)*16+(bx)+200)
也可以寫成:
mov
ax,[200+bx]
movax,200[bx]
movax,[bx]
.200
在codesg中填寫**,將datasg中定義的第乙個字串轉化為大寫,第二個字串小寫
assume cs:codesg,ds:datasg
datasg segment
db 'basic '
db 'minix '
datasg ends
codesg segment
start:
codesg ends
endstart
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s: mov al,0[bx]
and a1,11011111b
mov o[bx],al
mov al,5[bx]
or al,00100000b
mov 5[bx],al
inc bx
loop s
si和di是8086cpu中和bx功能相近的暫存器,si和di不能夠分成兩個8位暫存器來使用。
用si和di實現將字串」welcome to masm!」複製到它後面的資料區中
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
db '..............................'
datasg ends
codesg segment
start:mov ax,datasg
mov ds,ax
mov si,0
mov cx,8
s: mov ax,0[si]
mov 16[si],ax
add si,2
loop s
mov ax,4c00h
int 21h
codesg ends
endstart
mov ax,[bx+si] //mov ax,[bx][si]
(ax)=((ds)*16+(bx)+(si))
將乙個記憶體單元的內容送入ax,這個記憶體單元的長度為2位元組,存放乙個字,偏移位址為bx中的數值加上si的數值,段位址在ds中
[bx+si+idata]偏移位址為(bx)+(si)+idata
mov ax,[bx+200+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200
assume cs:codesg,ds:datasg
datasg segment
db '1.file '
db '2.edit '
db '3.search '
db '4.view '
db '5.options '
db '6.help '
datasg ends
codesg segment
start:
codesg ends
endstart
將datasg中每個單詞的頭乙個字母改為大寫字母
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,6
s:mov al,[bx+3]
and al,11011111b
mov [bx+3],al
add bx,16
loop s
db 'ibm '
db 'dec '
db 'dos '
db 'vax '
將datasg(以上)的每個單詞改為大寫字母
在需要暫存資料的時候,我們都應該使用棧
stacksg segment 定義乙個段,用來做棧段,容量為16個位元組
dw 0,0,0,0,0,0,0,0
stacksg 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:mov
push cx 將外層迴圈的cx值壓棧
mov si,0
mov cx,3 內層迴圈次數
s:mov al,[bx+si]
and al,11011111b
mov [bx+si],al
inc si
loop s
add bx,16
pop cx 從棧頂彈出原cx,恢復cx
loop s0 外層迴圈的loop將cx減1
彙編 更靈活的定位記憶體位址
and 按位與 or 按位或 db unix db 75h,6eh,49h,58h 大小寫轉換 第5位置0,變大寫,第5位置1,變小寫 assume cs codesg,ds datasg datasg segment db bssic db minix datasg ends codesg seg...
第七章 更靈活的定位記憶體位址的方法
本章需掌握 程式設計,將datasg段中的每個單詞的頭乙個字母改寫成大寫字母。bx idata assume cs code,ds data data segment 注意 每個字串都是16位 db 1.file db 2.edit db 3.search db 4.view db 5.option...
六 彙編 更靈活的定位記憶體位址的方法
可以用 0 bx 的方法訪問記憶體的指令中,定位記憶體單元的位址。a.and 指令,按位進行與運算。b.or 指令,邏輯或指令,按位進行或運算。a.計算機中所有的資訊都是二進位制的,而人能理解的資訊是已經具有約定意義的字元。編碼儲存資訊,解碼展示資訊。b.目前計算機通常採用的編碼方式 ascii編碼...