매개 변수로 선언 한 변수를 전달하는 방법에 대한 도움이 필요합니다. 교수님이 잘 설명하지 못했고 그에게 질문을 할 때 그는 책을 읽으라고 말씀 하셨지만, 나는 그 책을 완전히 이해하지 못하기 때문에 내가 가진 질문이 있습니다.어셈블리 언어 x8086 - 전달 매개 변수
글쎄, 기본적으로이 숙제에서는 내 변수 (예 : userMsg, printSum, sumMessage, printW, wMessage 등)를 전달하는 것과 같은 절차에 매개 변수를 전달해야합니다. 현재 시작하는 방법에 관해서는 현재 우둔합니다.
내 코드를 보는 다른 사람이 주 프로 시저와 선언에서 변수 이름을 수정하고 프로그램을 완벽하게 실행할 수 있도록 String을 매개 변수로 전달하는 방법을 잘 모르겠습니다. 여기
는 내가 지금까지 무엇을 가지고 : 도움에 미리
.model small
.stack 100h
.data
Y dw ?
W dw ?
Sum dw ?
Space db ,0ah, '$'
userMsg db "Please enter your number: ", '$'
printSum db "The Sum is: ",
sumMessage db 0,0,0,0,0 ,0dh, 0ah
printW db "W is: "
wMessage db 0,0,0,0,0 ,0dh, 0ah, '$'
.code
main proc
mov ax,@data
mov ds,ax
call getInput
call calcInput
call modifySum
call displaySum
mov ax,4C00h
int 21h
main endp
;getInput procedure
getInput proc
mov si, 0
mov cx, 100
yLoop: ;Loop to print message asking user to input number
mov al, 0
mov al, userMsg[si]
inc si
cmp al, '$'
je endY
mov dl, al
mov ah, 2h
int 21h
loop yLoop
endY:
mov si, 0
mov cx, 0
mov cx, 10
mov bx, 0
loop1:
mov ah,1h
int 21h
cmp al,0dh
je endloop
sub al, 30h
mov ah, 0h
mov si, ax
mov ax, bx
mul cx
mov bx, ax
add bx,si
jmp loop1
endloop:
ret
getInput endp
;calcInput procedure
calcInput proc
mov Y, bx
mov ax,Y ;Store Y in ax register
sub ax,1
mov Y, ax
mov ax, 0
mov Sum,36 ; add 36 to Sum
mov bx,Y
add Sum,bx ; add 36 and Y into Sum
mov ax,Y
mov bx,4 ; take Y and divide by 4
mov dx,0
idiv bx
add Sum,ax
mov ax,Y ;take Y and divide by 100
mov bx,100
mov dx,0
idiv bx
add Sum,ax
mov bx,7
mov dx,0 ; calculate W
idiv bx
mov W,dx
add W,1
mov dx, W
ret
calcInput endp
;modifySum procedure
modifySum proc
add dl, 30h
mov wMessage+1, dl
mov ax, 0
mov dx, 0
mov ax,Sum
mov cx, 10 ;start modding the number 2553
idiv cx
mov si, 4
sumLoop: ;Loop to mod and store 2553 into sumMessage
add dl, 30h
mov sumMessage+[si], dl
mov dx, 0
mov cx, 10
idiv cx
dec si
cmp si, 0h
je endSum
loop sumLoop
endSum:
mov si, 1
removeZero: ;Locate zeros
cmp sumMessage+[si], 30h
je useSpace
jmp endRemove
loop removeZero
useSpace: ;Replace leading zeros with a blank space
mov sumMessage+[si], 20h
inc si
jmp removeZero
loop useSpace
endRemove:
ret
modifySum endp
;displaySum procedure
displaySum proc
mov ax, 0 ;Print a newline after user input
mov dl, Space
mov ah, 2h
int 21h
mov si, 0
mov cl, printSum
L1: ;Loop to print out "Sum is : 2553
mov al, 0
mov al, printSum[si]
inc si
cmp al, '$'
je end_loop
mov dl, al
mov ah, 2h
int 21h
loop L1:
end_loop:
ret
displaySum endp
end main
감사합니다!
인내심과)) 책을 읽고 :
문자열을 표시합니다. [이것을 확인하십시오] (https://courses.engr.illinois.edu/ece390/books/artofasm/CH11/CH11-1.html) – qwr[** 어셈블리 언어 확인 제 11 장 **] (http : /www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/Art%20Of%20Intel%20x86%20Assembly.pdf) – qwr
함수를 호출하고 객체로 컴파일하는 간단한 C 함수를 작성합니다 (일반적으로 -c 옵션 또는/c) 그런 다음이를 해체하고 컴파일러가 전달 된 매개 변수를 어떻게 그리고 어디에 넣는 지 정확히 확인하십시오. 그런 다음 책이하는 일에 적용하고, 수신 끝에서 동일한 작업을 수행하고, 매개 변수를 함께 추가하는 더미 함수를 만듭니다. 호출 규칙이 하나씩 다를 수 있으므로 asm 태스크와 함께 사용할 동일한 컴파일러를 사용하십시오. –