2011-07-06 3 views
0

안녕 얘들 아 내게 글을 처음 게시하면 나에게 잘 해줘! 나는 두 개의 숫자를 나누기 위해 시프트와 뺄셈을하는 프로그램을 만들어야 만한다. 나는 이미 더하기와 곱셈을 바꿀 수있는 프로그램을 만들었습니다. 지금 나누기 만하면됩니다. 이것은 내가 지금까지 가지고있는 것이다. 사용자는 2 개의 입력을 요구 한 다음 추가, 뺄셈, 곱셈, 나눗셈을하는 메뉴로 프로그램을 만들어야합니다. 이 같은8086 어셈블리 시프트 빼기 및 나누기

product_a_b proc near 
     clc 
     push ax 
     push cx 
     push bx 
     push si 
     push dx 
     push di 
     push bp 

     mov si, 00h 
     mov ax, 00h   
     mov bx, 00h 
     mov dx, 00h 
     mov cx, 00 

     mov al, A[si] 
     mov ah, A[si+1] 
     mov dl, B[bx] 
     mov dh, B[bx+1] 

     mov bp, 10h 

multiply: TEST DX, 01B 

     jz skip    
     add cx, ax 

skip:  rcr cx, 01 
     rcr dx, 01 
     dec bp    ; dec number 
     jnz multiply       

     mov [di],dl 
     mov [di+1],dh 
     mov [di+2],cl 
     mov [di+3],ch 

     pop bp 
     pop di       
     pop dx 
     pop si 
     pop bx 
     pop cx 
     pop ax 
     ret    
product_a_b endp    

QUOTIENT_A_B proc near 
     clc 
     push ax 
     push cx 
     push bx 
     push si 
     push dx 
     push di 
     push bp 

     mov si, 00h 
     mov ax, 00h   
     mov bx, 00h 
     mov dx, 00h 
     mov cx, 00 

     mov dl, A[si]   ;ax = m 
     mov dh, A[si+1] 
     mov al, B[bx]   ; dx = q 
     mov ah, B[bx+1]  ; cx = a 

     mov bp, 10h 

divide:  rcl cx, 01 
     rcl dx, 01 
     cmp cx, dx   
     jb div_add 
     dec bp    ; dec number 
     jnz divide       

div_add: add cx, dx 
     jmp divide 


     mov [di],dl 
     mov [di+1],dh 
     mov [di+2],cl 
     mov [di+3],ch 

     pop bp 
     pop di       
     pop dx 
     pop si 
     pop bx 
     pop cx 
     pop ax 
     ret   
QUOTIENT_A_B endp 
+0

을 나는 문제가 무엇인지 이해 확실하지 않다? – aardvarkk

+0

나는 shift를 사용하여 적절한 나누기 절차를 만드는 방법을 모르며 – Caliendo55

+0

'메뉴가있는 프로그램을 만들어야합니다 .'라고 뺍니다. 그게 너야 * 우리가 아니라, 맞지? 숙제에 도움이 필요하면 [숙제] 태그를 사용하십시오. –

답변

0

뭔가 작업 할 수 있습니다

; divide cx by dx, leaving the quotient in cx and the remainder in ax. 
     mov ax, 0 
     mov bp, 10h 
divide: sal cx, 1 
     rcl ax, 1 
     cmp ax, dx 
     jb smaller 
     sub ax, dx 
     inc cx 
smaller: dec bp 
     jnz divide