2017-01-18 1 views
-1

그래서 기본 계산기를 만들어야합니다. (내일 시험을 치루고 있습니다)하지만 막혔습니다. 배열에 첫 번째 num, 동작 (+ OR -) 그리고 배열 (number는 1-4 자리가되어야 함)로가는 두 번째 숫자가 나타납니다. 배열에서 모든 숫자를 가져 와서 전체 숫자 (이진수로 변환)로 변환하고, 수학적 작업을 수행하고 해답을 16 진수로 변환하여 인쇄합니까? 첫 번째 숫자를 입력하라는 메시지가 나타나면 사용자가 0을 입력 할 때만 분리 된 기능으로 처리해야합니다. 이것은 내 코드입니다. 내 질문과 코드 (인터넷에서 찾고있는 것과 비슷한 것을 찾을 수 없음)를 이해하시기 바랍니다. 감사합니다 :)함수 및 배열을 사용하는 조립 계산기 (보조 및 추가)

이 잘못
data segment         
entr_first db 'Please enter first num 1-4 digits:',0ah,0dh,'$' 
select_op db 'Please enter operation type + or -:',0ah,0dh,'$' 
entr_sec db 'Please enter second num 1-4 digits:',0ah,0dh,'$' 
ans db 'Your answer is: $' 
num1 db 7 dup('5') 
num2 db 7 dup('5') 
answer db 8 dup('6') 
opr db 1 dup('0') 
data ends 
sseg segment stack 
sseg ends 
code segment 
assume cs:code,ds:data,ss:sseg 
main: mov ax,data 
     mov ds,ax 
     call kelet1 
     call revah 
     call keletOpr 
     call revah 
     call kelet2 
     call dollar 
     int 21h 
     mov ax,4c00h 
     int 21h 
dollar: 
     mov cx,0 
     mov si,0 
     mov cl,num1[si+1] 
     add si,cx 
     add si,2 
     mov num1[si],'$' 
     mov cx,0 
     mov si,0 
     mov cl,num1[si+1] 
     add si,cx 
     add si,2 
     mov num2[si],'$' 
     ret 
revah: mov ah,2 
     mov dl,13 
     int 21h 
     mov dl,10 
     int 21h 
     ret 
kelet1: mov dx,offset entr_first 
     mov ah,9 
     int 21h 
     mov dx,offset num1 
     mov ah,10 
     int 21h 
     ret 
keletOpr:mov dx,offset select_op 
     mov ah,9 
     int 21h 
     mov ah,1 
     int 21h 
     mov opr[0],al 
     ret 
kelet2: mov dx,offset entr_sec 
     mov ah,9 
     int 21h 
     mov dx,offset num2 
     mov ah,10 
     int 21h 
     ret 
     code ends 
     end main 
+0

심지어 SO는 문자열을 숫자로 변환하기위한 샘플로 가득합니다 ... 또한 문제를 일으키는 원인을 구체적으로 나타내려면 알고리즘이 필요합니까 아니면 구현을 고집하고 있습니까? 그렇다면 정확히 어디에서? 추신 : 특히 다른 사람들이 도움을 원하면 코드에 주석을 달아주십시오. 이것이 학교 과제라면, 학습 자료를 다시 방문하고 교사와 상담하십시오. – Jester

답변

0
mov dx,offset num1 
    mov ah,10 
    int 21h 

, 서비스 int 21hah=0Ahdocumentation를 참조, 다른 데이터 구조를 필요로한다.

두 번째 문자열의 입력 또한 물론 잘못되었습니다.

그리고 call kelet2 다음에 코드는 의미가 없습니다.

(종료 호출은 int 21h,ah=4Ch 제외).

이 시작 지점에서 Assembly 시험을 통과하기에 충분한 Assembly를 1 일 만에 배울 수 있다고 생각하지 않습니다. 시험이 Assembly에 관한 것이 아니기를 바랍니다.

집중적 인 (매일 8-12 시간) 학습 + 프로그래밍 후 2 ~ 3 주 후에는 "초보자"수준까지 올라갈 수 있다고 생각합니다.

그럼 실제로 묻는 것은 무엇입니까? 이 사이트는 "나를 위해 코드"서비스가 아니며 "한정판 감각으로 나는 여기에서 정확하게 그것을하는 경향이 있지만"무료 강의를 의회에 제공하지 않습니다. 그러나 한 해답으로 반년을 놓치지는 못합니다.

어쩌면 시험을 여름로 보내고 어셈블리 지식에 매주 4-6h 일해야합니다.

+0

1 년 동안 어셈블리를 공부하고 있고 코드에 기록한 모든 것이 우리가 배웠고 쓰도록되어 있습니다. –

+0

@ValerNaamaKuznetsov : 글쎄, 뭐라 할까 ... 1) 나는 길을 찾을 수 없습니다. "내일"시험을 위해 "고칠 것"2) 1 년이 지난 후에 => 무언가가 잘못되었습니다. 귀하의 강사 또는 귀하의 노력, 또는 귀하의 학습 방법 또는 이들의 조합. 3) 귀하의 의견이 "하지만 ** **"를 원할 경우 몇 주 동안 열심히 일하게 될 것입니다. 그러면 강의를 조금 도와 주려고 할 수도 있지만 시간이 많이 걸리므로 먼저 헌신해야합니다. 그리고 실제로 어셈블리에서 프로그래밍하는 방법을 알고 싶습니다. 정상적인 속도로 세금을 부과한다면 (나는 그렇지 않습니다), 그러한 코스는 귀하의 전체 에드 빌과 같이 비용이들 것입니다. – Ped7g