鱼C论坛

 找回密码
 立即注册
查看: 3089|回复: 9

关于实验六(问题7.9)中bx的问题

[复制链接]
发表于 2015-12-24 19:43:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 红烧芋头 于 2015-12-25 11:16 编辑

先上代码:
assume cs:code, ss:stack, ds:data
stack segment
dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends

data segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
data ends

code segment
start:mov ax, data
mov ds, ax
mov bx, 0       ;此处能不能改成mov bx ,3

mov cx, 4
s0:push cx //使用栈存放外层循环的cx
mov si, 0

mov cx, 4
s1:mov al, [bx + si]
and al, 11011111B //转换为大写的方法
mov [bx +  si], al
inc si
loop s1

add bx, 10H
pop cx //弹出存储在外层循环中的cx
loop s0

mov ax, 4c00H
int 21H
code ends
end start

我想问的的红色部分能不能改成“mov bx,3”,然后在下面的“[bx + 3 + si]”中就不用加这个3了,直接写“[bx + si]”行不行?我看了很多人的答案,见过改写si 的(这样:mov si, 3),但是暂时没有见过直接改bx 的。bx应该没有规定必须指向数据段开头的把?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-12-24 19:48:11 | 显示全部楼层
我的电脑是64位的,我有DOSBox,会debug,但是不知道怎么debug那些*.EXE的文件。所有就发帖求助。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-25 00:51:46 | 显示全部楼层
你对寻址方式还不很了解,建议再学习一下

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

  2. stack segment
  3.         dw 0, 0, 0, 0, 0, 0, 0, 0
  4. stack ends

  5. data segment
  6.         db '1. display      '        ; 注意这里,每行字符一定要16个(看书上)不够的用空格填充
  7.         db '2. brows        '
  8.         db '3. replace      '
  9.         db '4. modify       '
  10. data ends

  11. code segment
  12. start:
  13.         mov ax, data
  14.         mov ds, ax
  15.         mov bx, 0       ;此处不能改成mov bx, 3 ,因为bx控制着行

  16.         mov cx, 4
  17. s0:        push cx
  18.         mov si, 0

  19.         mov cx, 4
  20. s1:        mov al, [bx + si + 3]        ;注意这里, 不能写成 [bx + 3 + si], 否则无法通过编译
  21.                                 ;书上说 [bx + si + idata]
  22.                                 ;所以应该写成 [bx + si + 3]
  23.                                
  24.                                
  25.                                
  26.         and al, 11011111B         ;转换为大写的方法
  27.         mov [bx + si + 3], al
  28.         inc si
  29.         loop s1

  30.         add bx, 10h        ;bx加16(10h)指向下一行
  31.         pop cx
  32.         loop s0

  33.         mov ax, 4c00H
  34.         int 21H
  35. code ends
  36. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-25 11:15:45 | 显示全部楼层
人造人 发表于 2015-12-25 00:51
你对寻址方式还不很了解,建议再学习一下

我今天看到8.6节后面写着“用bx定位整个结构体,用idata定位结构体中某一个数据项,用si定位数组项中的每一个元素”。我想你说得就是这个意思吧?我接受这种思路,但我就是在想用上面的bx=3的方式能不能实现题目的要求,我编译过,可以生成EXE文件。但是我没法debug,DOSBox没法debug生成的EXE文件。要不然我直接试一下就是了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-25 11:19:30 | 显示全部楼层
人造人 发表于 2015-12-25 00:51
你对寻址方式还不很了解,建议再学习一下

不过我之前的疑惑“为什么没人用bx=3”我想我已经明白了,因为“bx”要指向开头,定位整个结构体。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-25 21:47:42 | 显示全部楼层
红烧芋头 发表于 2015-12-25 11:15
我今天看到8.6节后面写着“用bx定位整个结构体,用idata定位结构体中某一个数据项,用si定位数组项中的每 ...

为什么不能debug
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-25 21:48:41 | 显示全部楼层

debug test.exe
不行吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-25 23:10:25 | 显示全部楼层
人造人 发表于 2015-12-25 21:48
debug test.exe
不行吗

确实不行。你也是win7  64位的吗?你用DOSBox使用debug成功了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-25 23:20:24 | 显示全部楼层
红烧芋头 发表于 2015-12-25 23:10
确实不行。你也是win7  64位的吗?你用DOSBox使用debug成功了吗?

我用虚拟机
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-26 10:54:03 | 显示全部楼层

额。。。。好吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-8 00:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表