外部程序没有返回正确的值 - 程序集

时间:2016-11-09 19:44:12

标签: assembly dos tasm dosbox

我制作了2个程序 - 1个是主要功能,另一个是外部功能。两个代码似乎都写得正确,但我没有从外部程序中获得正确的值。

这是主程序:

EXTRN SWAPPROC:FAR
INCLUDE io.h

Cr        EQU  0DH       ; carriage return
Lf        EQU  0AH       ; line feed

TheStack  SEGMENT STACK
          DW   100H DUP (?)
TheStack  ENDS

Data      SEGMENT
Num       Dw   ?
Num2      Dw   ?
Prompt1   DB   'Please enter the positive integer of your choice:  ', 0
Prompt2   DB   'Please enter another positive integer of your choice:  ', 0
String    DB   40 DUP (?)
New   DB   6 DUP (?), 0
New2      DB   6 DUP (?), 0
Data      ENDS

Code      SEGMENT
          ASSUME Cs:Code, Ds:Data

Start:    Mov Ax, SEG Data    ; Load Data Segment Number.
          Mov Ds, Ax

Prompt:   Output Prompt1      ; Prompt for first number.
          Inputs String, 40   ; Read the ASCII characters.    
      AToI String      
          Mov Num, Ax 
      Output Prompt2      ; Prompt for first number.
          Inputs String, 40   ; Read the ASCII characters.    
      AToI String      
      Mov Num2, Ax
          mov Ax, num 
      mov bx, num2
      Itoa new, ax
      Itoa new2, bx
      Output new
      Output new2
      Lea ax, num
      push ax
      Lea bx, num2
      push bx
      call swapproc
      Itoa new, ax
      Itoa new2, bx
      output new
      Output new2



Quit:     Mov Al, 0           ; Put return code of zero in Al.
          Mov Ah, 4CH         ; Put DOS function call in Ah.
          int 21H             ; Call DOS

Code      ENDS
          END  Start

这是外部程序:

public swapproc

code     segment
     assume cs:code

SWAPPROC  PROC  FAR

     push ax
     push bx    

main:    

         mov dx, 0
     div bx
     Mov AX, [bx]
     mov [bx], Dx
     cmp dx, 0
     jne main
     POP BX 
     POP AX
     ret

swapproc endp
code     ends
     end

例如,当我在第一个程序中输入12和4的值时,它们会被正确返回,但是当调用另一个程序时,没有一个值被正确返回,或者至少没有返回正确的登记册。因为12和4的GCD是4,我应该从其他程序返回0的值 - 最后的余数 - 和4 - GCF。相反,无论输入什么值,我总是返回0和2.将程序组合成1表明数学编码是正确的。我使用命令tlink mainprog + swapproc + io使用tlink链接程序。在使用TASM组装程序并与tlink链接时,都没有出现错误或警告。通过对外部程序和主程序进行少量编辑,我似乎被困在一个疯狂的追逐圈子里只是为了坚持同样的问题。它给我带来了头痛,沮丧和困惑,因为我已经确保所有程序都是正确编写的,并且没有错别字或缺少命令 - 据我所知至少。什么会导致2个完美编写的程序最终导致其中1个返回不正确的值?为了使第二个程序返回正确的值,我需要做什么?这是DOS模拟器我使用(dos框)的问题吗?或者这个问题是否太复杂而无法理解和解决?

0 个答案:

没有答案