2016-12-06 2 views
0

3 + 3을 추가하면 답변이 정확하지만 7 + 7을 추가하면 작동하지 않습니다. 그리고 나는 75 + 75와 같은 두 개의 숫자를 더하고 싶습니다. 그 답은 150이나 900 + 100이어야합니다. 대답은 1000이어야합니다.두 개의 16 비트 숫자를 어셈블리 언어로 어떻게 추가 할 수 있습니까?

그 과정은 무엇입니까? 내 코드로 잘못은 무엇인가, 내가

.model small 
.stack 0100h 
.data 
    num1 db ? 
    num2 db ? 
    msg1 db 13,10, "Enter 1st Number : $" 
    msg2 db 13,10, "Enter 2nd Number : $" 
    msg3 db 13,10, "The answer is : $" 
.code 

    mov ax, @data 
    mov ds, ax 

    lea dx,msg1 
    mov ah,09h 
    int 21h 

start: 
    mov ah,01h 
    int 21h 
    cmp al,0dh    
    je second               
    sub al,30h                
    push ax                
    mov num1,al 
    jmp start 

second: 
    lea dx,msg2 
    mov ah,09h 
    int 21h 

number2:  
    mov ah,01h 
    int 21h 
    cmp al,0dh    
    je ans               
    sub al,30h                
    push ax                
    mov num2,al 
    jmp number2 

ans: 

    mov al,num1 
    add al,num2 

    MOV AH,9 
    LEA DX,MSG3 
    INT 21H 

    ADD AL,30H 
    MOV AH,2h 
    MOV DL,AL 
    INT 21H 

jmp start 

end 
+3

기사의 많은이 동일있다 ol '문제 : 여러 자리 숫자. 문자열을 숫자 (atoi)와 역 (itoa)으로 변환하는 방법을 살펴보십시오. 그것에 관한 많은 질문이 있어야합니다. –

+0

나는 어떻게 되돌릴 지 알지만, 지금 당장이 문제를 해결할 수 있을지 모르겠다. 내 코드를 수정하도록 도와 줄 수있는 것이 있는가 ?? 덕분에 –

+1

마가렛은 당신에게 해결책을주었습니다. 숫자를 나타내는 다중 숫자 문자열을 숫자로 변환하려고합니다. 그럴 수는 없지만 대신 문자열을 오른쪽에서 왼쪽으로 반복하고 텍스트에서 정수로 변환하고 곱해야 할 필요가 있습니다. Google에 'atoi'를위한 많은 예제가 있습니다. –

답변

0

.. 간단한 대답을 난 그냥 새로운 어셈블리 언어를 이니까 미안 해요 : 사용하여 < 16 비트 레지스터>, < 16 비트 레지스터 추가>

당신 ' 바이너리 표현과 ASCII 표현의 두 가지를 혼란스럽게합니다. 귀하의 CPU는 "4711"또는 "12345"의 의미를 알지 못합니다. 그것은 단지 일련의 바이트입니다.

은 당신이 당신의 문자열의 ASCII-표현을 변환 자신의 이진 값을 추가하고, ASCII 모두

결과를 다시 변환해야, SO

+0

또는 그는 실제로 두 자릿수의 ASCII 문자열을 추가 할 수 있습니다 ... 때때로 이러한 학생 질문을 볼 때, 나는이 방법으로 해법을 게시하기를 원합니다. 다만 강사가 반응하는 방법을 시험해보십시오. : D – Ped7g

관련 문제