8086 сборки сдвига вычитания и деления - PullRequest
0 голосов
/ 06 июля 2011

Эй, ребята, это мой первый пост, так что будьте добры ко мне! Я должен составить программу, которая сдвигает и вычитает, чтобы в итоге разделить два числа. Я уже сделал программу, которая может сдвигать, добавлять и умножать ... Просто нужно разделить сейчас. Это то, что я до сих пор. Вы должны создать программу с меню, которое запрашивает у пользователей 2 входа, а затем складывает, вычитает, умножает, а затем делит.

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  

1 Ответ

0 голосов
/ 06 июля 2011

Примерно так может работать:

; 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
...