美文网首页
汇编学习记录(王爽)6章包含多个段的程序、7章

汇编学习记录(王爽)6章包含多个段的程序、7章

作者: 官总哦 | 来源:发表于2019-04-18 21:18 被阅读0次

    1.如何在代码段中加入一个数据段?

    \bullet 运用DW 命令(define word),开辟n个字型数据。DW一般放在代码段的前面部分,可以CS:0,CS:2,....等方法来获得数据的值。

    \bullet 在书写的汇编程序中,我们可以在代码段开始时加上标识符Start,代表汇编指令的开始,不然编译器会以为我们开辟的数据空间也是指令,造成编译错误。(最后end start)

    2.如何在代码段中加入栈

    \bullet 仍然采用dw命令,开辟空间0,0,0,......。然后我们在代码段中,将栈顶SS:SP指向栈顶(SS可以直接采用CS,偏移量SP由数据大小计算得出)

    七、灵活的定位寻址

    1.汇编中,所有的字符数据被转为ASCii码放在内存当中(一个字符占一个字节)

    2.更加灵活的寻址方式

    (1)[BX+Idata] (=Idata[BX]) 一个变量加一个常数寻址

    (2)[BX+DI][BX+SI] (=[BX][DI]) 双变量寻址

    (3)[BX+DI+1] (=1[BX][DI]) 双变量加一个常数寻址

    3.采用双变量寻址时,一般是做二维数组使用,那我们在遍历二维数组的时候一般需要双重的循坏。可是我们知道汇编中的loop指定CX为计数器,两层循环会使一个CX寄存器用不过来,怎么办呢?

    \bullet 放入我们的栈中。我们在程序中需要保存一些数据时,一般不会再使用很多寄存器(寄存器数量有限),我们会把需要保存的数据暂存在栈中。

    (将数据段所有字母变成大写)本章实验题目:

    assume cs:codesg,ss:stacksg,ds:datasg

    datasg segment

        db '1. display      '

        db '2. brows        '

        db '3. replace      '

        db '4. modify       '

    datasg ends

    stacksg segment

        dw 0,0,0,0,0,0,0,0

    stacksg ends

    codesg segment

    start: mov ax,datasg

            mov ds,ax

            mov ax,stacksg

            mov ss,ax

            mov sp,10H

            mov bx,0

            mov cx,4

    S:     push cx

            mov si,0

            mov cx,4

    S0:     mov al,ds:[bx+3+si]

            and al,11011111b

            mov ds:[bx+3+si],al

            inc si

            loop

            add bx,16

            pop cx

            loop

            mov ax,4c00H

            int 21H

    codesg ends

    end start

    相关文章

      网友评论

          本文标题:汇编学习记录(王爽)6章包含多个段的程序、7章

          本文链接:https://www.haomeiwen.com/subject/ihbmwqtx.html