第1个回答 2022-07-06
我们字符其实就是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
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
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