我们字符其实就是ASII码对应0-127个字符
我们编写汇编语言程序时,要知道几个概念
dw 定义一个字
db 定义一个字节
dd 定义一个双子
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(都是非法指令)
字是汇编语言中占16位
字单元:有两个地址连续的内存单元组成,存放一个字型数据
and 运算是 相同为1不同为0
or 运算是 相同为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] ;把小写转换成大写
and al,11011111b
mov [bx],al
inc bx
loop s1
mov bx,5
mov cx,11
s2:mov al,[bx] ;把大写转换成小写
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个寄存器
通用寄存器AX BX CX DX
变址寄存器SI(源地址寄存器) DI(目标变址寄存器)
指针寄存器SP BP
指令指针寄存器IP
段寄存器CS SS DS ES
标志寄存器PSW
SI和DI常执行与地址有关的操作
SI和DI是8086CPU中和BX功能相近的寄存器
区别: SI和DI不能够分成两个8位寄存器来使用
应用SI和DI
用寄存器SI和DI实现将字符串’welcome to masm!!!’复制到它后面的数据区中。
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 ;取的是字型数据
add di,2
loop s1
mov ax,4c00h
int 21h
code ends
end start