关于实验六(问题7.9)中bx的问题
本帖最后由 红烧芋头 于 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,
and al, 11011111B //转换为大写的方法
mov , 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”,然后在下面的“”中就不用加这个3了,直接写“”行不行?我看了很多人的答案,见过改写si 的(这样:mov si, 3),但是暂时没有见过直接改bx 的。bx应该没有规定必须指向数据段开头的把? 我的电脑是64位的,我有DOSBox,会debug,但是不知道怎么debug那些*.EXE的文件。所有就发帖求助。 你对寻址方式还不很了解,建议再学习一下
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 ' ; 注意这里,每行字符一定要16个(看书上)不够的用空格填充
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 ,因为bx控制着行
mov cx, 4
s0: push cx
mov si, 0
mov cx, 4
s1: mov al, ;注意这里, 不能写成 , 否则无法通过编译
;书上说
;所以应该写成
and al, 11011111B ;转换为大写的方法
mov , al
inc si
loop s1
add bx, 10h ;bx加16(10h)指向下一行
pop cx
loop s0
mov ax, 4c00H
int 21H
code ends
end start 人造人 发表于 2015-12-25 00:51
你对寻址方式还不很了解,建议再学习一下
我今天看到8.6节后面写着“用bx定位整个结构体,用idata定位结构体中某一个数据项,用si定位数组项中的每一个元素”。我想你说得就是这个意思吧?我接受这种思路,但我就是在想用上面的bx=3的方式能不能实现题目的要求,我编译过,可以生成EXE文件。但是我没法debug,DOSBox没法debug生成的EXE文件。要不然我直接试一下就是了。 人造人 发表于 2015-12-25 00:51
你对寻址方式还不很了解,建议再学习一下
不过我之前的疑惑“为什么没人用bx=3”我想我已经明白了,因为“bx”要指向开头,定位整个结构体。
红烧芋头 发表于 2015-12-25 11:15
我今天看到8.6节后面写着“用bx定位整个结构体,用idata定位结构体中某一个数据项,用si定位数组项中的每 ...
为什么不能debug 人造人 发表于 2015-12-25 21:47
为什么不能debug
debug test.exe
不行吗 人造人 发表于 2015-12-25 21:48
debug test.exe
不行吗
确实不行。你也是win764位的吗?你用DOSBox使用debug成功了吗? 红烧芋头 发表于 2015-12-25 23:10
确实不行。你也是win764位的吗?你用DOSBox使用debug成功了吗?
我用虚拟机 人造人 发表于 2015-12-25 23:20
我用虚拟机
额。。。。好吧。
页:
[1]