[Hb-VI] 使用[ bx + si(di) + idata ]更灵活的访问内存
来源:互联网 发布:王充 论衡 知乎 编辑:程序博客网 时间:2024/06/09 15:04
《汇编语言·第三版》--王爽
1 问题
编程,将datasg段中的每个单词的前4个字母改为大写字母。
assume cs:codesg, ss:stacksg, ds:datasg
stacksg segment
dw 0,0, 0, 0, 0, 0, 0, 0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start:
codesg ends
end startDatasg中的数据的存储结构如下图:
Figure1. datasg中数据的存储结构
2 代码
1. assume cs:codesg, ss:stacksg, ds:datasg
2.
3. stacksg segment
4. dw 0, 0, 0, 0, 0, 0,0, 0
5. stacksg ends
6.
7.
8. datasg segment
9. db '1. display '
10. db '2. brows '
11. db '3. replace '
12. db '4. modify '
13. datasg ends
14.
15.
16. codesg segment
17. start:
18. mov ax, datasg
19. mov ds, ax ;ds指向数据段datasg
20.
21. mov ax, stacksg
22. mov ss, ax
23. mov sp, 2
24.
25. mov bx, 0 ;指向datasg每行
26.
27. mov cx, 4 ;四行,一共循环四次
28.
29. s0: push cx ;外层循环数cx值缓存到stack的第一个字节单元处
30.
31. mov si, 0 ;用来索引每行的前四个字母
32. mov cx, 4 ;内层循环中的循环次数,对应每行的前四个字母
33. s1: mov al, 3[bx + si] ;[bx + si +3]
34. and al, 11011111b
35. mov 3[bx + si], al
36.
37. inc si
38. loop s1
39.
40. add bx, 16 ;下一行字符串
41. pop cx
42. loop s0
43.
44. mov ax, 4c00h
45. int 21h
46. codesg ends
47. end start3 调试
(1) stacksg和datasg段地址
stacksg段地址为076B,datasg段地址为076A。
(2) 查看datasg段内容
(3) 执行程序后看datasg段内容
4 总结
[bx+si(di) + idata]可以更加灵活的访问内存。像此次题目中具有多行,每行中具有固定的偏移,每行还需要遍历的情况就可以使用[bx+si(di) + idata]的形式来访问内存。对于更简单的情况,或许只需要用到[bx],[bx + idata]或[bx + si(di)]的形式来访问内存。对于更复杂的情况,或许还会同时用上si和di。
- [Hb-VI] 使用[ bx + si(di) + idata ]更灵活的访问内存
- 汇编语言之寄存器使用(bx,si,di,bp)
- 汇编语言之寄存器使用(bx,si,di,bp)
- 汇编学习笔记-si-di-bx-bp
- BX&BP DI&SI 不能同时出现
- 汇编 AX, BX, CX, DX, SI, DI,
- 不同的寻址方式灵活运用(di,si)
- 使用 bx+idata 方式进行数组的处理
- 使用[bx+idata]的方式进行数组处理
- [Hb-IV] 使用[bx]和loop
- 汇编寄存器的使用,SI,DI的使用
- 汇编寄存器的使用,SI,DI的使用
- 汇编寄存器的使用,SI,DI的使用
- 汇编寄存器的适用 SI, DI 的使用
- LEA AX,[BX+SI] 和MOV AX,OFFSET [BX+SI]的区别
- SI,DI
- 第七章 灵活运用寻址方式(si/di和内嵌套循环)——所有的习题练习
- SI和DI寄存器的用途
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 七周七语言--安装篇
- HDU4099 Revenge of Fibonacci
- 2056 Rectangles
- QA要从RD开始,自我测试
- [Hb-VI] 使用[ bx + si(di) + idata ]更灵活的访问内存
- 带参宏使用
- get an image file with XMLHttpRequest and encode with base64
- 第十三周项目6-体验文件操作:C++文件操作初体验
- 项目二-成绩处理
- leetcode sort-list
- uva-1593 代码对齐
- Concurrence运行环境部署(Ubuntu)
- Palindrome Partitioning II