. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  6.1.2问题,是否是印刷错误?  [已解决] 回复[ 8次 ]   点击[ 737次 ]  
e56004474
[帖 主]   [ 发表时间: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




希望某人运行下,指点我错哪了?
e56004474
[第1楼]   [ 回复时间:2008-09-15 19:05 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
此程序,我压栈和出栈看不到数据,数据为0h,所以没法判断SP初始时的位置是哪?
e56004474
[第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
-
e56004474
[第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此文件。
e56004474
[第4楼]   [ 回复时间:2008-09-15 19:13 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
按照内容,我觉得因该
mov ax,0h
mov ds,ax   
为印刷错误
不然一段程序使用的段不是在同一个段了。
e56004474
[第5楼]   [ 回复时间:2008-09-15 20:12 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1007&qkSg=1&qID=1079
引用上面连接的问题。还是理解题目错误啊,白白浪费2小时了。
e56004474
[第6楼]   [ 回复时间:2008-09-15 20:19 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1007&qkSg=2&qID=7729&readSg=1

此连接中参考后,远行,答案正确。
e56004474
[第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



=============================================
注意分号,可能只中文的。
e56004474
[第8楼]   [ 回复时间:2008-09-15 20:22 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
此贴由 贴主 于 [ 2008-09-15 20:22 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved