|
主题 : : 6.1.2问题,是否是印刷错误? [已解决] |
回复[ 8次 ]
点击[ 737次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-09-15 19:01 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
ASSUME CS:CODES
dw 0123h,0456h
dw 0789h,0abch,0defh,0febh,0cdah,0987h
dw 0,0,0,0,0
start:MOV AX,0000h
MOV ss,AX
mov ax,0
mov ds,ax ;印刷的错误怀疑就是这句。
mov sp,1ch ;此处估计改为1C的,因为,栈为空时,此时SP 应该指向偏移1cH位置 。如果改为1AH,我认为当PUSH 第一个字时,也就是0123H时,栈的第一个空间没用到,而是直接PUSH 到栈的第2个空间。(由于怀疑印刷错误,只要我SP 的值大于1ah,程序都不出错。)
mov bx,0
mov cx,8
s: push [bx]
pop [bx]
add bx,2
loop s
MOV AH,4CH
INT 21H
CODES ENDS
END START
希望某人运行下,指点我错哪了? | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-09-15 19:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
此程序,我压栈和出栈看不到数据,数据为0h,所以没法判断SP初始时的位置是哪? | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-09-15 19:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
C:\DOCUME~1\ADMINI~1>debug E:\tools\612l.exe
-u
14D8:001A B80000 MOV AX,0000
14D8:001D 8ED0 MOV SS,AX
14D8:001F B80000 MOV AX,0000
14D8:0022 BC1C00 MOV SP,001C
14D8:0025 BB0000 MOV BX,0000
14D8:0028 B90800 MOV CX,0008
14D8:002B FF37 PUSH [BX]
14D8:002D 8F07 POP [BX]
14D8:002F 83C302 ADD BX,+02
14D8:0032 E2F7 LOOP 002B
14D8:0034 B44C MOV AH,4C
14D8:0036 CD21 INT 21
14D8:0038 CD21 INT 21
-t
AX=0000 BX=0000 CX=0038 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=14D8 CS=14D8 IP=001D NV UP EI PL NZ NA PO NC
14D8:001D 8ED0 MOV SS,AX
-t
AX=0000 BX=0000 CX=0038 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=0022 NV UP EI PL NZ NA PO NC
14D8:0022 BC1C00 MOV SP,001C
-t
AX=0000 BX=0000 CX=0038 DX=0000 SP=001C BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=0025 NV UP EI PL NZ NA PO NC
14D8:0025 BB0000 MOV BX,0000
-t
AX=0000 BX=0000 CX=0038 DX=0000 SP=001C BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=0028 NV UP EI PL NZ NA PO NC
14D8:0028 B90800 MOV CX,0008
-t
AX=0000 BX=0000 CX=0008 DX=0000 SP=001C BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=002B NV UP EI PL NZ NA PO NC
14D8:002B FF37 PUSH [BX] DS:0000=20CD
-t
AX=0000 BX=0000 CX=0008 DX=0000 SP=001A BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=002D NV UP EI PL NZ NA PO NC
14D8:002D 8F07 POP [BX] DS:0000=20CD
-t
AX=0000 BX=0000 CX=0008 DX=0000 SP=001C BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=002F NV UP EI PL NZ NA PO NC
14D8:002F 83C302 ADD BX,+02
-t
AX=0000 BX=0002 CX=0008 DX=0000 SP=001C BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=0032 NV UP EI PL NZ NA PO NC
14D8:0032 E2F7 LOOP 002B
-t
AX=0000 BX=0002 CX=0007 DX=0000 SP=001C BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=002B NV UP EI PL NZ NA PO NC
14D8:002B FF37 PUSH [BX] DS:0002=9FFF
-t
AX=0000 BX=0002 CX=0007 DX=0000 SP=001A BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=002D NV UP EI PL NZ NA PO NC
14D8:002D 8F07 POP [BX] DS:0002=9FFF
-t
AX=0000 BX=0002 CX=0007 DX=0000 SP=001C BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=0000 CS=14D8 IP=002F NV UP EI PL NZ NA PO NC
14D8:002F 83C302 ADD BX,+02
-d14d8:0010 0030
14D8:0010 00 00 00 00 00 00 00 00-00 00 B8 00 00 8E D0 B8 ................
14D8:0020 00 00 BC 1C 00 BB 00 00-B9 08 00 FF 37 8F 07 83 ............7...
14D8:0030 C3 .
-d0000:0000 0030
0000:0000 C8 14 12 30 BB 13 E5 0E-02 33 A7 03 B1 13 E5 0E ...0.....3......
0000:0010 00 00 00 00 00 00 2F 00-D8 14 E5 0E 14 E5 0E 02 ....../.........
0000:0020 46 07 14 02 0A 04 14 02-3A 00 A7 03 54 00 A7 03 F.......:...T...
0000:0030 6E n
- | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-09-15 19:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
mov ax,0
mov ds,ax ;印刷的错误怀疑就是这句。
mov ax,0 改为mov ax,0h ;是我的疏忽,改为mov ax,0h后,用R 命令,才能看到DS=0000H,不然DS一直是14C8H。
因为我不是用DEBUG 编译连接的,而是用Masm for Windows 集成实验环境 2008.3 编译的,然后用DEBUG 加载Masm for Windows 集成实验环境 2008.3 生成的612l.exe此文件。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-09-15 19:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
按照内容,我觉得因该
mov ax,0h
mov ds,ax
为印刷错误
不然一段程序使用的段不是在同一个段了。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2008-09-15 20:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
|
|
|
|
|
[第6楼]
[ 回复时间:2008-09-15 20:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
|
|
|
|
|
[第7楼]
[ 回复时间:2008-09-15 20:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0ffffh
dw 0,0,0,0,0
start:
mov ax,cs
mov ss,ax
mov sp,1ah ;此条指令为所填第二空
mov ax,0000h
mov ds,ax
mov bx,0h
mov cx,8
s: push [bx]
pop cs:[bx] ;此条指令为所填第三空
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
==========================================
C:\DOCUME~1\ADMINI~1>debug E:\tools\612z.exe
-u
14D8:001A 8CC8 MOV AX,CS
14D8:001C 8ED0 MOV SS,AX
14D8:001E BC1A00 MOV SP,001A
14D8:0021 B80000 MOV AX,0000
14D8:0024 8ED8 MOV DS,AX
14D8:0026 BB0000 MOV BX,0000
14D8:0029 B90800 MOV CX,0008
14D8:002C FF37 PUSH [BX]
14D8:002E 2E CS:
14D8:002F 8F07 POP [BX]
14D8:0031 83C302 ADD BX,+02
14D8:0034 E2F6 LOOP 002C
14D8:0036 B8004C MOV AX,4C00
14D8:0039 CD21 INT 21
-g14d8:0036
AX=0000 BX=0010 CX=0000 DX=0000 SP=001A BP=0000 SI=0000 DI=0000
DS=0000 ES=14C8 SS=14D8 CS=14D8 IP=0036 NV UP EI PL NZ AC PO NC
14D8:0036 B8004C MOV AX,4C00
-d14d8:0000 36
14D8:0000 68 10 A7 00 BB 13 E5 0E-16 00 A7 03 B1 13 E5 0E h...............
14D8:0010 00 00 00 00 36 00 D8 14-E5 0E 8C C8 8E D0 BC 1A ....6...........
14D8:0020 00 B8 00 00 8E D8 BB 00-00 B9 08 00 FF 37 2E 8F .............7..
14D8:0030 07 83 C3 02 E2 F6 B8 .......
-d0000:0000 0030
0000:0000 68 10 A7 00 BB 13 E5 0E-16 00 A7 03 B1 13 E5 0E h...............
0000:0010 20 00 00 00 32 00 D8 14-E5 0E 14 02 FF 03 14 02 ...2...........
0000:0020 46 07 14 02 0A 04 14 02-3A 00 A7 03 54 00 A7 03 F.......:...T...
0000:0030 6E n
-
估计错在 运行到 int 21指令后,所以答案老不对。
所以只运行到 mov ax,4c00h
=============================================
注意分号,可能只中文的。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2008-09-15 20:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
此贴由 贴主 于 [ 2008-09-15 20:22 ] 结贴。 结贴原因:问题已解决 | | |
|