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

如题所述

第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
相似回答