《汇编语言(第四版)》王爽 第六章 包含多个段的程序

本文介绍了汇编语言中如何使用dw定义字型数据并进行操作,展示了通过栈实现数据逆序的方法,以及如何将数据、代码、栈分别放置在不同段中以提高程序组织的清晰度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6.1 在代码段中使用数据

我们来看一个程序:

assume cs:code

code segment

	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

代码中的dw的含义是定义字符数据。dw即define word,这段代码中,使用dw定义了8个字型数据,一共占据16个字节。程序运行时,这8个数据的地址分别是CS:0,CS:2…CS:E。

使用dw等方式存放数据,在代码段开头标记start,并在end后写上start,表面第一条指令。

6.2 在代码段中使用栈

看一个程序

assume cs:codesg

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

这个程序使用栈做到了数据的逆序存放。

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

将数据、代码、栈放在一个段里,难免会显得混乱,所以我们考虑使用多个段来存放数据、代码和栈。

例如,和上一个程序一样的功能,把数据逆序存放,我们可以这样写。

assume cs:code,ds:data,ss:stack

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 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

定义多个段,不同的段有不同的名字。段名代表了段地址,使用时只需写偏移地址。“代码段”“数据段”“栈段”完全是我们的安排,名字没有数据意义,只需方便编程起。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三元湖有大锦鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值