第四章(笔记总结)

简单的汇编语言源程序基本语法:

assume cs:code

code segment
    mov ax , 0001H
    add ax , ax

    mov ax , 4C00H
    int 21H
code ends

end 


在汇编语言源程序中,包含两种指令分别是,汇编指令和伪指令:

汇编指令:

1)(mov ax , 0001H ·······int  21H)这些指令有对应的机器码,可以编译成机器指令,最终为CPU所执行。

2)mov ax , 4C00H

      int 21H

      这两行指令时作为一个程序的返回(程序返回就是当一个程序结束后,将CPU的控制权交给使它得以运行的程序)

伪指令:

1)assume 的作用是将有特定用途的段和相关的寄存器关联起来。

2)XXX segment ··········· XXX ends 用于定义一个段,segment为段的起始,ends是段的结束。而每个段都有一个标识,XXX就是这段的标识符。

3)end 标志着程序的结束。


汇编程序从写出到执行的过程:

编程 -> 源程序(.asm)-> 目标程序(.obj) -> 连接 -> 运行程序(.exe)-> 加载 -> 运行


练习:

assume cs:code

code segment
        mov ax , 2000H
        mov ss , ax        ; 栈空间所在的段地址

        mov sp , 0
        add sp , 10        ;偏移地址

        pop ax             ;将内存中的栈空间的数据读取到寄存器中
        pop bx		   

        push ax		   ;将寄存器中的数据传送到内存中的栈空间
        push bx

        pop ax             ;将内存中的栈空间的数据读取到寄存器中
        pop bx

        mov ax , 4c00H
        int 21h
code ends

end


利用debug把程序加载到内存,同时给出内存中2000:0000 起的16个字节


mov ax , 2000

mov ss , ax

是定义栈空间所在的段地址


mov sp , 0

add sp , 10

是定义栈空间的偏移地址(在debug中貌似把mov sp , 0 的指令执行隐式进行了)


pop ax 

pop bx

把栈空间里的数据进行读取


push ax

push bx

把寄存器中的数据压进栈空间


由于栈空间的操作时以字为单位,所以由图可见:

栈空间操作之前:


栈空间操作之后:

2000:000A和2000:000C的以字类型的数据发生了互换


再次进行

pop ax 

pop bx

把栈空间里的数据进行读取

寄存器ax和bx的数据发生了互换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值