王爽老师的汇编实验五(6)题
本帖最后由 考试郁闷者 于 2012-7-5 21:37 编辑为什么一步步执行到倒数第三步就跳出了?和标准答案对比了,没有任何差别啊。。。但是就是跳出。。。已经有人问过了,但是没有解决啊!
assume cs:code,ds:a,ss:b
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,10h
mov bx,0
mov cx,8
s: push ds:
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start第一行去掉cs、es段也一样啊!!
最好贴出源代码 贴出源代码 标准答案在这里(6)程序如下,编写code段中代码,用PUSH指令将A段中的前8个字型数据,逆序存储到B段中。
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,a
mov ds,ax ;ds指向a段
mov ax,b
mov bx,0 ;ds:bx指向a段的第1个单元
mov ss,ax
mov sp,16 ;设置栈顶指向b:16
mov cx,8
s: push
add bx,2
loop s ;将a段中0~16个单元逆次入栈
code ends
end start
14.mov sp,10h,这里错了,栈段长度不够 本帖最后由 无限幻想 于 2012-7-26 08:17 编辑
我给一个新思维答案,解题思路是实验五第二题第四个问题答案的结论
assume cs: code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov bx, 0
mov ax, cs
sub ax, 1h
mov ss, ax
mov sp, 16
mov ax, cs
sub ax, 3h
mov ds, ax
mov cx, 8
s:push
add bx, 2
loop s
mov ax, 4c00h
int 21h
code ends
end start
你的答案就是栈顶设置错误,SP 应为16,不然存不下8个数,或者是你画葫芦的时候画失误了,呵呵
极品飞车 发表于 2012-7-12 13:45 static/image/common/back.gif
14.mov sp,10h,这里错了,栈段长度不够
我写的就是10H 但就没有报错啊 无限幻想 发表于 2012-7-26 08:13 static/image/common/back.gif
我给一个新思维答案,解题思路是实验五第二题第四个问题答案的结论
assume cs: code
16=10H 啊 不好意思,我把你的程序debug了,是正确的,你之所以遇到调试问题是可能系统造成的。 assume cs: code , ds: a, ss: b
a segment
dw 1,2,3,4,5,6,7,8,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax, a
mov ds, ax
mov ax, b
mov ss, ax
mov sp, 22
mov bx, 0
mov cx, 8
s:push ds:
addbx, 2
loop s
mov ax, 4c00h
int 21h
code ends
end start
我反复用debug调试了,原先的程序在loop那儿用p就可以通过,一直用t到最后3个就会报错,后来研究了sp的值,发现达到22的时候程序运行无误不会出错,但是查看ss段数据,就不是那么回事,比16多出来的空间有垃圾值存在,08不是从ss:0开始的
页:
[1]