当前位置:网站首页>王爽汇编语言第六章:包含多个段的程序
王爽汇编语言第六章:包含多个段的程序
2022-08-06 12:19:00 【Deteriorate_Kr】
文章目录
前言


一、在代码段中使用数据
一个题目
考虑这样一个问题,编程计算以下8个数据的和,结果存在ax 寄存器中:
0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H。
分析

我们可以将它们一个一个地加到ax寄存器中,但是,我们希望可以用循环的方法来进行累加,所以在累加前,要将这些数据存储在一组地址连续的内存单元中。如何将这些数据存储在一组连续的内存单元中呢?我们可以用指令一个一个地将它们送入地址连续的内存单元中,可是这样又有一个问题,到哪里去找这段内存空间呢?

assume cs:codesg
codesg 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
codesg ends
end




将程序6.1编译、连接,但不运行




结论

出现问题

程序6.2
assume cs:codesg
codesg 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
codesg ends
end start

end的作用
end 除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。
回顾程序执行过程

确定第一条指令


程序描述框架

二、在代码段中使用栈
任务


写出程序
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
;用dw定义8个字型数据,在程序加载后,将取得8个字的
;内存空间,存放这8个数据。我们在后面的程序中将这段
;空间当作栈来使用。
start: mov ax,cs
mov ss,ax
mov sp,30h ;设置栈顶ss:sp指向cs:30
mov bx,0
mov cx,8
s: push cs:[bx]
add bx,2
loop s ;以上将代码段0~15单元中的8个字型数据依次入栈
mov bx,0
mov cx,8
s0: pop cs:[bx]
add bx,2
loop s0 ;以上依次出栈8个字型数据到代码段0~15单元中
mov ax,4c00h
int 21h
codesg ends
end start ;指明程序的入口在start处
注意
cs:10~cs:2f这一段内存空间中数据都是0,我们正好把这一段当做空栈
一个0代表一个字,两个字节,32个内存空间。不是一个0代表一个字节,16个内存空间。
ss:sp指向cs:30
我们定义这些数据的最终目的是:通过它们取得一定容量的内存空间

检测点6.1



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

程序6.4
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 ;设置栈顶ss:sp指向stack:20
mov ax,data
mov ds,ax ;ds指向data段
mov bx,0 ;ds:bx指向data段中的第一个单元
mov cx,8
s:push [bx]
add bx,2
loop s ;以上将data段中的0~16单元中的8个字型数据依次入栈
mov bx,0
mov cx,8
s0:pop [bx]
add bx,2
loop s0 ;以上使8个字型数据依次出栈并送到data段的0~16单元中
mov ax,4c00h
int 21h
code ends
end start
程序6.4的说明
1.

2.
data、stack段中有很多地址。当然我们这个段本身也应该有一个地址,不然我们怎么知道data、statck段在哪里呢


3."代码段“、“数据段”、“栈段”完全是我们的安排







结论

assume cs:b,ds:a,ss:c
a segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
a ends
c segment
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
c ends
b segment
d: mov ax,c
mov ss,ax
mov sp,20h ;设置栈顶ss:sp指向c:20
mov ax,a
mov ds,ax ;希望用ds:bx访问a段中的数据,ds指向a段
mov bx,0 ;ds:bx指向a段中的第一个单元
mov cx,8
s:push [bx]
add bx,2
loop s ;以上将a段中的0~15单元中的8个字型数据依次入栈
mov bx,0
mov cx,8
s0:pop [bx]
add bx,2
loop s0 ;以上使8个字型数据依次出栈并送到a段的0~15单元中
mov ax,4c00h
int 21h
b ends
end d
边栏推荐
- Week 7 Learning Representation with Auto-Encoder (Unsupervised Learning)
- IT监控常青树Zabbix6部署全流程-尚文网络xUP楠哥
- 违反常识追求流量 农产品带货直播乱象丛生
- 链表 | 找出并返回链表相交的起始节点 | leecode刷题笔记
- Web网页端IM产品RainbowChat-Web的v4.1版已发布
- PS6603 代理直销Type-C PD 电源传输接收 SINK 端控制器芯片
- SQL 注入复习总结
- 【Web3 系列开发教程——创建你的第一个 NFT(5)】使用 Ethers.js 铸造 NFT | 测试用例
- mayavi可视化kitti
- SQL图解面试题:如何找到喜欢的电影?(表连接,语句执行顺序、模糊查询)
猜你喜欢
随机推荐
Kubernetes stain and tolerance
Microsoft's new service allows businesses to expand access to their threat intelligence repository
Go-Excelize API源码阅读(二)——OpenFile()
8 medical data security scenario solutions of Meichuang Technology are launched!
QT: Using custom signals and slots
【SSL集训DAY1】A【BFS】
Kubernetes 运维经验分享
机器学习实战-多项式回归结合Pipeline管道机制
LeetCode high frequency question 75. Color classification: Dutch flag question
Flexible and easy-to-use sql monitoring script part4
severlet运行原理
PHP fopen write file content
生产级Redis 高并发分布式锁实战2:缓存架构设计问题优化
Structure of the actual combat battalion module nine operations
链表 | 环形链表 | leecode刷题笔记
MD5【加密以及解密】
链表 | 找出并返回链表相交的起始节点 | leecode刷题笔记
ES6新特性——generator
NASA suspends all spacewalks on the International Space Station due to safety issues with spacesuits
PS6652+JD6606S_2C 35W双C口PD协议方案









