我們字符其實(shí)就是ASII碼對(duì)應(yīng)0-127個(gè)字符
我們編寫匯編語(yǔ)言程序時(shí),要知道幾個(gè)概念
dw 定義一個(gè)字
db 定義一個(gè)字節(jié)
dd 定義一個(gè)雙子
idata定義
mov ax,[idata] ;代表 mov ax,[1] mov ax,[2] mov ax,[3]
mov bx idata ;代表mov bx,1 mov bx,2 mov bx,3
mov ds,idata ;代表mov ds,1 mov ds,2(都是非法指令)
字是匯編語(yǔ)言中占16位
字單元:有兩個(gè)地址連續(xù)的內(nèi)存單元組成,存放一個(gè)字型數(shù)據(jù)
and 運(yùn)算是 相同為1不同為0
or 運(yùn)算是 相同為0 不同為1
通過例子去理解處理字符串
assume cs:codesg,ds:data
data segment
??? db 'BaSic'
??? db 'iNfOrMaTion'
data ends
codesg segment
start:
??? ??? mov ax,data
?????? mov ds,ax
?????? mov bx,0
?????? mov cx,5
??? ?s1:mov al,[bx] ;把小寫轉(zhuǎn)換成大寫
?????? and al,11011111b
?????? mov [bx],al
?????? inc bx
?????? loop s1
?????? mov bx,5
?????? mov cx,11
??? ?s2:mov al,[bx] ;把大寫轉(zhuǎn)換成小寫
?????? or al,00100000b
?????? mov [bx],al
?????? inc bx
?????? loop s2
?????? mov ax,4c00h
?????? int 21h
codesg ends
end start
通過[bx+idata]尋址方式
assume cs:codesg,ds:data
data segment
??? db 'BaSic'
??? db 'iNfOr'
data ends
codesg segment
start:
?????? mov ax,data
?????? mov ds,ax
?????? mov bx,0
?????? mov cx,5
??? ?s1:mov al,[bx]
?????? and al,11011111b
?????? mov [bx],al
?????? mov al,[bx+5]
?????? or al,00100000b
?????? mov [bx+5],al
?????? inc bx
?????? loop s1
?????? mov ax,4c00h
?????? int 21h
codesg ends
end start
SI和DI寄存器
8086CPU有14個(gè)寄存器
通用寄存器AX BX CX DX
變址寄存器SI(源地址寄存器) DI(目標(biāo)變址寄存器)
指針寄存器SP BP
指令指針寄存器IP
段寄存器CS SS DS ES
標(biāo)志寄存器PSW
SI和DI常執(zhí)行與地址有關(guān)的操作
??? SI和DI是8086CPU中和BX功能相近的寄存器
??? 區(qū)別: SI和DI不能夠分成兩個(gè)8位寄存器來使用
應(yīng)用SI和DI
用寄存器SI和DI實(shí)現(xiàn)將字符串’welcome to masm!!!’復(fù)制到它后面的數(shù)據(jù)區(qū)中步悠。
assume cs:code,ds:data
data segment
??? db 'welcome to masm!!!'
??? db '..................'
dataends
code segment
start:
?????? mov ax,data
?????? mov ds,ax
?????? mov si,0
?????? mov di,18
?????? mov cx,9
??? ?s1:mov ax,[si]
?????? mov [di],ax
?????? add si,2 ;取的是字型數(shù)據(jù)
?????? add di,2
?????? loop s1
?????? mov ax,4c00h
?????? int 21h
code ends
end start