汇编程序中建立三个缓冲区的数据段设置问题?

Terryguy1991 2009-12-11 10:25:33
要从键盘输入三个字符串,先在程序数据定义部分定义三个缓冲区BUFFERA,BUFFERB,BUFFERC,
DATA SEGMENT
BUFFERA DB 32
DB 0
DB 32 DUP(0)
BUFFERB DB 81
DB 0
DB 81 DUP(0)
BUFFERC DB 32
DB 0
DB 32 DUP(0)

PROMPTSTRINGA DB 'input A string:',0AH,0DH,'$'
PROMPTSTRINGB DB 'input B string:',0AH,0DH,'$'
PROMPTSTRINGC DB 'input c string ',0AH,0DH,'$'
PROMPTSTRINGENTER DB 0AH,0DH,'$'
……
在字符串输入部分:
…………
MOV DX,OFFSET PROMPTSTRINGA
MOV AH,09H
INT 21H
MOV DX,SEG BUFFERA
MOV DS,DX
MOV DX,OFFSET BUFFERA
MOV AH,0AH
INT 21H

MOV DX,OFFSET PROMPTSTRINGENTER
MOV AH,09H
INT 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV DX,OFFSET PROMPTSTRINGB
MOV AH,09H
INT 21H
MOV DX,SEG BUFFERB
MOV ES,DX
MOV DX,OFFSET BUFFERB
MOV AH,0AH
INT 21H

MOV DX,OFFSET PROMPTSTRINGENTER
MOV AH,09H
INT 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV DX,OFFSET PROMPTSTRINGC
MOV AH,09H
INT 21H
MOV DX,SEG BUFFERC
MOV **,DX ;这个**该填什么?
MOV DX,OFFSET BUFFERC
MOV AH,0AH
INT 21H

MOV DX,OFFSET PROMPTSTRINGENTER
MOV AH,09H
INT 21H
前连个缓冲区的数据段分别设置为DS,ES,那该如何设置第三个缓冲区的数据段呢?
...全文
375 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
suchx 2009-12-13
  • 打赏
  • 举报
回复
错了是rep cmpsb
suchx 2009-12-13
  • 打赏
  • 举报
回复
我知道你的意思了,你想使用rep scasb指令吧,所以才要求有DS和ES段。但是DS=ES时程序也可以正确运行的啊
Terryguy1991 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nanlingcg 的回复:]
引用 7 楼 terryguy1991 的回复:
引用 5 楼 nanlingcg 的回复:
引用 4 楼 terryguy1991 的回复:
楼上的貌似不行,我试了一下,把数据段都设置成DS,但是原本可以的程序结果出错

为什么不可以啊?不是你把把几个变量定义在DS里,程序里的ES你保持不变吧?

这程序谁写的?不是你自己写的啊?

BUFFERB 用ES干什么呢?难道说几个输入的字符串还要经过处理后存在BUFFERB 里?另有用意?--不能排除这种可能性!

输入的三个字符串还要进行操作,目的是将B中的A(前提是B包含A)替换成c

我估计还是应该要进行操作,但我估计是操作后三个变量最后全部体现在B,实现输出,这样,只要把ES地址改成显存地址就可很直观很易看地实现(不过,用DS也可以一样,只是不那么浅显).
希望你能把这个程序完成!
[/Quote]
兄台的前面两句说对了,但是后面两句我不懂
suchx 2009-12-12
  • 打赏
  • 举报
回复
你全部放在一个段里就可以了,你的3个缓冲区也是全部定义在DATA SEGMENT里的
mov ax,data
mov ds,ax
mov es,ax
就好了啊
cnzdgs 2009-12-12
  • 打赏
  • 举报
回复
缓冲区都在同一个段中分配。
对于较大的缓冲区(几十KB以上)才需要另外分配内存,访问时给段寄存器赋值。
nanlingcg 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 terryguy1991 的回复:]
引用 5 楼 nanlingcg 的回复:
引用 4 楼 terryguy1991 的回复:
楼上的貌似不行,我试了一下,把数据段都设置成DS,但是原本可以的程序结果出错

为什么不可以啊?不是你把把几个变量定义在DS里,程序里的ES你保持不变吧?

这程序谁写的?不是你自己写的啊?

BUFFERB 用ES干什么呢?难道说几个输入的字符串还要经过处理后存在BUFFERB 里?另有用意?--不能排除这种可能性!

输入的三个字符串还要进行操作,目的是将B中的A(前提是B包含A)替换成c
[/Quote]
我估计还是应该要进行操作,但我估计是操作后三个变量最后全部体现在B,实现输出,这样,只要把ES地址改成显存地址就可很直观很易看地实现(不过,用DS也可以一样,只是不那么浅显).
希望你能把这个程序完成!
Terryguy1991 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nanlingcg 的回复:]
引用 4 楼 terryguy1991 的回复:
楼上的貌似不行,我试了一下,把数据段都设置成DS,但是原本可以的程序结果出错

为什么不可以啊?不是你把把几个变量定义在DS里,程序里的ES你保持不变吧?

这程序谁写的?不是你自己写的啊?

BUFFERB 用ES干什么呢?难道说几个输入的字符串还要经过处理后存在BUFFERB 里?另有用意?--不能排除这种可能性!
[/Quote]
输入的三个字符串还要进行操作,目的是将B中的A(前提是B包含A)替换成c
suchx 2009-12-12
  • 打赏
  • 举报
回复
DATA SEGMENT
BUFFERA DB 32
DB 0
DB 32 DUP(0)
BUFFERB DB 81
DB 0
DB 81 DUP(0)
BUFFERC DB 32
DB 0
DB 32 DUP(0)
PROMPTSTRINGA DB 'input A string:',0AH,0DH,'$'
PROMPTSTRINGB DB 'input B string:',0AH,0DH,'$'
PROMPTSTRINGC DB 'input c string ',0AH,0DH,'$'
PROMPTSTRINGENTER DB 0AH,0DH,'$'
data ends
code segment
assume ds:data,cs:code
start : nop
mov ax,data
mov ds,ax
剩下的程序
code ends
end start
你是指这样不行吗?你定义了code segment了吧,不会把程序和数据定义在一个段里了吧
nanlingcg 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 terryguy1991 的回复:]
楼上的貌似不行,我试了一下,把数据段都设置成DS,但是原本可以的程序结果出错
[/Quote]
为什么不可以啊?不是你把把几个变量定义在DS里,程序里的ES你保持不变吧?

这程序谁写的?不是你自己写的啊?

BUFFERB 用ES干什么呢?难道说几个输入的字符串还要经过处理后存在BUFFERB 里?另有用意?--不能排除这种可能性!
Terryguy1991 2009-12-12
  • 打赏
  • 举报
回复
楼上的貌似不行,我试了一下,把数据段都设置成DS,但是原本可以的程序结果出错
friendly_ 2009-12-11
  • 打赏
  • 举报
回复
都放在ds中就行了

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧