2014-12-15 2 views
-2

어떻게 이것을 어셈블리로 변환합니까?어셈블리 언어 If 및 else 문

나는이 IFS '

를 삽입 할

LEA SI, MSG1 
call PRINT_STRING  
gotoxy 0,1 

LEA SI, MSG2 
call PRINT_STRING 
gotoxy 0,2 

LEA SI, MSG3 
call PRINT_STRING 
gotoxy 0,3 

LEA SI, MSG4 
call PRINT_STRING 
gotoxy 0,4  

LEA SI, MSG5 
call PRINT_STRING 
gotoxy 0,5 


DEFINE_PRINT_NUM_UNS

을 DEFINE_PRINT_STRING

MSG1 DB 'Choose Arithmetic Operation ' , 0 
MSG2 DB '(1) Addition ',0 
MSG3 DB '(2) Subtraction', 0 
MSG4 DB '(3) Multiplication',0 
MSG5 DB '(4) Division',0  

DEFINE_SCAN_NUM
정의하고이 메뉴를 가지고 주어진 1,515,

(X == 1)
다음 추가하면
(엑스 == 2)
다음 다른
이 경우 (X == 3)
다음 다른
곱 빼면 다른 (엑스 == 4하다면)
그런 다음 나누기

주어진 각 연산에 ​​대한 함수가 있습니다.

아무도 없습니까? 나는 어셈블리에 익숙하지 않다. 적어도 if와 else 문은 이상하게 생각한다. 하하, 그런데 고마워. 8086 조립

+0

단순 용액 : 여기서

THERE: MOV CL,07H JMP F: 

은 예시 코드 'CMP의 X, 1; je add; cmp x, 2; je 빼기 '등등. 어디서 붙잡 혔어? – Jester

답변

0

, 이런 식으로 뭔가 :

if(x == 1) { 
     add(); 
    } 

이런 식으로 뭔가 될 것입니다 : goto 당신이 후이 할 수있는 유일한 일이 어디 있는지 만 (if(something) goto somewhere을 할 수있는 것처럼

cmp ax,1 
    jne .skipIt 
    call add 
.skipIt: 

그것은이다 if()). 물론 분기가 많을 때 지저분 해집니다 (그리고 분기 예측 오류가있는 최신 CPU의 경우 "많은 분기"가 훨씬 느려질 수 있습니다).

특정 경우 (숫자가 순차적 인 경우); 더 똑똑한 방법은 테이블을 사용하는 것입니다. 이 같은 예를 들어 뭔가 :

switch(x) { 
     case 0: 
      add(); 
      break; 
     case 1: 
      sub(); 
      break; 
    } 

이 될 수 :

section .data 
myTable: 
    dw add 
    dw sub 
    section .text 

    cmp bx,2    ;Is BX too large? 
    jae .l1     ; yes, skip it 
    add bx,bx    ;bx = bx * 2 
    call [myTable+bx]  ;Call the address in the table 
.l1: 
1

나 다음의 경우 (도끼 == BX)에 대한 예를

로 그것을 설명하자 ... :

경우에 대한
CPM AX , BX ;COMPARE TO SET FLAGS 
JMP THERE ;IF EQUAL THEN SKIP CORRECTION 
THERE: MOV CL,07H 

다음 (AX = BX!) :

,536,
CPM AX , BX ;COMPARE TO SET FLAGS 
JNE THERE ;IF EQUAL THEN SKIP CORRECTION 
THERE: MOV CL,07H 

2 점을 고려해보십시오!

1 곳 코드 :

MOV AH,4CH 
INT 21H 

2 이후 (거기 MOV CL, 07H)는 다시는에서 뛰어 한 곳에서 얻을 수있는 코드의 나머지 부분에 대한 레이블을 선택합니다.같은

MOV AX,Data_here 
    MOV DS,AX 
    MOV AX,Stack_here 
    MOV SS,AX 
    MOV x,05H 
    MOV AL,x 
    MOV BL,2H 
    MOV AH,0 
    DIV BL 
    CMP AH,00H 
    JE L: 
    F:ADD AL,30H 
    MOV AH,02H 
    MOV DL,AL 
    INT 21H 
    MOV AH,4CH 
    INT 21H  
    L: ADD AL,AH 
    JMP F: