8086 汇编笔记(五):包含多个段的程序

简介: 8086 汇编笔记(五):包含多个段的程序

一、在代码段中使用数据

“dw”的含义是定义字型数据

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
code segment
 
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
 
    mov bx,0
    mov ax,0
    mov cx,8
 
s:  add ax cs:[bx]
    add bx,2
    loop s
 
    mov ax,4c00h
    int 21h
 
code ends
 
end

程序中的指令就要对这8个数据进行累加,可这8个数据在哪里呢?

由于它们在代码段中,程序在运行的时候 CS 中存放代码段的段地址,所以可以从CS 中得到它们的段地址。

它们的偏移地址是多少呢?

因为用 dw 定义的数据处于代码段的最开始,所以偏移地址为 0,这 8个数据就在代码段的偏移 0、2、4、6、8、A、C、E 处。程序运行时,它们的地址就是 CS:0、CS:2、CS:4、CS:6、CS:8、CS:A、CS:C、CS:E。

我们可以在源程序中指明程序的入口所在,具体做法如下

code seqment
 
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
 
start:  mov bx,0
        mov ax,0
        mov cx,8
 
s:      add ax,cs:[bx]
        add bx,2
        loop s
 
        mov ax,4c00h
        int 21h
 
code ends
 
end start

我们用 end 指令指明了程序的入口在标号 start 处

二、在代码段中使用栈

codesg segment
 
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
start:  mov ax,cs
        mov ss,ax
        mov sp,30h
 
        mov bx,0
        mov cx,8
    s:  push cs:[bx]
        add bx,2
        loop s
 
        mov bx,0
        mov cx,8
    s0: pop cs:[bx]
        add bx,2
        loop s0
 
    mov ax,4c00h
    int 21h
 
codesg ends
end start

三、将数据、代码、栈放入不同的段

data segment
 
  dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
 
data ends
 
stack segment
 
  dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
stack ends
 
code segment
 
start:  mov ax,stack
        mov ss,ax
        mov sp,20h
 
        mov ax,data        ;指令“mov ax,data”的含义就是将名称为“data”的段的段地址送入 ax
        mov ds,ax
 
        mov bx,0
 
        mov cx,8
    s:  push [bx]
        add bx,2
        loop s
 
        mov bx,0
 
        mov cx,8
   s0:  pop [bx]
        add bx,2
        loop s0
 
      mov ax,4c00h
      int 21h
 
code ends
 
end start


我们从程序中可明显地看出,定义一个段的方法和前面所讲的定义代码段的方法没有区别,只是对于不同的段,要有不同的段名

相关文章
加快软盘操作速度的汇编程序源代码
加快软盘操作速度的汇编程序源代码
|
3月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
100 3
|
3月前
|
程序员 编译器 数据处理
汇编高手秘籍:解锁性能优化新境界,用汇编语言让你的程序飞起来!
【8月更文挑战第31天】汇编语言作为编程基石,其高效性能备受推崇。尽管现代软件开发更偏爱高级语言,但在性能要求极高的场景下,汇编优化仍不可或缺。本文通过示例代码介绍四种优化技巧:循环展开、寄存器分配、指令重排及SIMD指令使用,显著提升执行效率。同时强调分析性能瓶颈、测试优化效果及保持代码可读性的重要性,助力开发者在关键代码路径上实现性能突破。
74 0
|
4月前
|
存储 安全 数据安全/隐私保护
Windows 32 汇编笔记(一):基础知识
Windows 32 汇编笔记(一):基础知识
|
3月前
|
存储 编译器 Linux
Windows 32 汇编笔记(二):使用 MASM
Windows 32 汇编笔记(二):使用 MASM
|
4月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
4月前
|
存储 索引
8086 汇编笔记(十一):内中断
8086 汇编笔记(十一):内中断
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(九):call 指令 和 ret 指令
|
4月前
|
编译器
8086 汇编笔记(八):转移指令的原理
8086 汇编笔记(八):转移指令的原理