汇编语言处理字符串和SI DI寄存器

我们字符其实就是ASII码对应0-127个字符


ASII码

我们编写汇编语言程序时,要知道几个概念

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。