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

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 2,879评论 0 1
  • 一、基础知识 mov ax,bx把BX内容送到AX中。汇编语言有3类指令,汇编指令、伪指令,其他符号。CPU通过地...
    赤果_b4a7阅读 2,161评论 0 1
  • 编程语言的发展 机器语言由0和1组成 汇编语言(Assembly Language)用符号代替了0和1,比机器语言...
    阿凡提说AI阅读 4,628评论 0 15
  • 如何看“绝句”? 绝句是一种四句的民歌体,南北朝的民歌一般就是这样的。唐人以绝句入乐,开元天宝间,此风尤盛。旗亭赌...
    和和蛋阅读 1,090评论 2 27
  • 安全感是什么?我想一百个人会有一百个答案。 或许,是出门的时候满电的手机和充足的现金; 或许,是阴阴的天气拿在手里...
    不似你情深阅读 258评论 0 1

友情链接更多精彩内容