2015-01-14 2 views
0

두 개의 배열을 매개 변수로받는 어셈블리 8086에 서브 루틴을 작성하려고합니다. 어떻게해야합니까?8086에서 proc에 매개 변수 보내기

mov dl,[arr1] 
mov dh, [arr2] 
call adding 

이 내 서브 루틴이다 : 내 코드는 지금까지입니다

adding proc 
    push ax 
    push bx 
    push cx 


    mov [arrx],dl 
    mov [arry],dh 
     mov  cx, duplen 
     mov bx, cx ; point to lest significant digit! 
     dec bx 
    next_digit: 

     ; add digits: 
     mov  al, arrx[bx] 
     adc  al, arry[bx] 

     ; this is a very useful instruction that 
     ; adjusts the value of addition 
     ; to be string compatible 
     aaa 
     mov  sum[bx], al 
     dec  bx 
     loop next_digit 

    pop cx 
    pop bx 
    pop ax 


    ret 

그것은 어떤 문제가 있습니까? 서브 루틴과

mov dl,[arr1] 
mov dh, [arr2] 
call adding 

사용 뭔가 같은

mov si,arr1 
mov di,arr2 
call adding 

대신에

+0

당신은 * 그것으로 무엇이 잘못되었는지? * 당신이 무엇을하려고 않았다 무엇을 의미합니까 , 어떤 결과를 보았습니까? 그리고 무엇을 기대 했습니까? 참고로, 'AAA' 명령은 BCD (2 진화 10 진수) 숫자로 작업하기위한 것입니다. 그것은 연속적인 * nibbles * (4 비트 값 또는 반 바이트)의 각 십진수를 인코딩하는 숫자입니다. BCD를 사용하고 있습니까? – lurker

+0

예, BCD를 사용하고 있습니다. 출력은 합계 값 대신에 모두 0입니다. arr1과 arr2 주소가 proc에 올바르게 전달되지 않았다고 생각합니다. @ lurker – user63835

+1

좋습니다. 귀하의 게시물에서 귀하가 BCD를 사용하고 귀하의 결과가 무엇인지 분명하게 밝혀야합니다. 게시물을 편집하여 해당 작업을 수행 할 수 있습니다. – lurker

답변

0

clc   ;You forgot this !!! 
next_digit: 
; add digits: 
mov al,[si+bx] 
adc al,[di+bx] 
aaa 
mov sum[bx],al 
dec bx 
loop next_digit