2014-02-25 1 views
0

나는 구 이름의 배열이 있습니다어셈블러 (TASM 64) 배열과 요소는

.model tiny 

.data 

vardas1 db "Rokas",0ah,'$' 
vardas2 db "Tomas",0ah,'$' 
vardas3 db "Matas",0ah,'$' 
vardas4 db "Domas",0ah,'$' 
vardas5 db "Augis",0ah,'$' 
vardas6 db "Vofka",0ah,'$' 
vardas7 db "Marka",0ah,'$' 
vardas8 db "Auris",0ah,'$' 
vardas9 db "Edvis",0ah,'$' 


vardai dw offset vardas1, offset vardas2, offset vardas3, offset vardas4, offset vardas5, offset vardas6, offset vardas7, offset vardas8, offset vardas9 

.code 

org 100h 

나는 키보드에서 숫자를 읽을 필요를하고 나는 그 이름을 인쇄해야합니다. 예를 들어 5를 누르고 콘솔은 "Augis"라고 써야합니다. BTW, 두 번째 코드 블록이

paieska: 

    mov dx, offset _comment1  ; Just string name asking user to input digit 
    mov ah, 9      
    int 21h       

    mov j, 00h      ; Trying to input the digit from keyboard 
    mov ah, 01h 
    mov dl, 0ah 
    int 21h 

    mov bx, offset vardai   ; Add array "names" to bx register 
    add bx, cx      ; Add cx for indexing 
    mov dx, [bx]     ; Add first array element to dx register 

    add cx, 2      ; Increasing cx by 2, because I'm using data word not data byte 
    mov ah, 9      ; Try to print it 
    int 21h 


    cmp cx, j      ; Try to compare cx (index of array) to mine inputed digit "j" 
    jne paieska 
    je end 
+0

환영을 실행할 것 -

이제 끝으로 점프! 나는 조금 문제가있는이 질문을 발견하고 귀하의 질문은 무엇입니까? 그리고 우리에게 관련이있는 코드 만 보여주십시오. – Llopis

+0

무엇이 문제입니까? 작동하지 않는 내용 (오류 메시지, 응용 프로그램 충돌, ...)과 현재 도움이 필요하지 않은 부분을 분명히해야합니다. – Seki

답변

0
mov ah, 01h 
    mov dl, 0ah ;NO NEED FOR THIS - INT21/01 DOES NOT USE DL 
    int 21h 

    MOV AH, '1'  ; MIN INPUT CHAR 
    mov bx, offset vardai ; Add array "names" to bx register WELL, ASSIGN ACTUALLY 
    MOV CX,2  ;NUMBER OF BYTES TO ADD (WORDS, NOT BYTES) 
LOOPN: 
    mov dx, [bx] ; name-pointer array element to dx register 
    CMP AH,AL  ; MATCHING char? 
    JE PNAME  ; YES, PRINT NAME 
    add bx, cx  ; Add cx=2 for next name 
    inc AH   ; next possible character input 
    CMP AH,'9'+1 ; allowed is '1'..'9' 
    jne loopn  ; in allowed range 
; input not 1..9 
    mov dx, offset errormessage 
PNAME: 
    mov ah, 9  ; Try to print it 
    int 21h 
    jmp end 

잘 작동하지 않는 모든 코드, 단지 루프 아니다, 나는 CAPS와 접근 방식을 수정하려고하지만 너무 복잡하게되었다.

기본적으로 키보드에서 01 기능을 사용하여 문자를 읽는 중입니다. 이 캐릭터는 AL에 도착합니다. 모두 잘되면 '1'.. '9'이어야합니다. 이러한 ASCII 문자 '1'.. '9', 즉

다음 단계는 테이블의 시작 BX을 설정하는 것입니다 이 AH 최소 문자로 당신이 예상 진수 31..39 및 CX입니다 2입니다 주목 테이블에 바이트가 아닌 단어가 포함되어 있기 때문입니다.

이제 루프가 생겼습니다. 테이블에서 X을로드하고 ALAH과 같은지 확인하십시오. 사용자가 1을 입력하면이 값이 같으므로 문자열을 인쇄하십시오. 및 증가 -

그렇지 않으면 다음 (내가 쓴 다만 방법 ... MOV CX,2 불필요한 것 의미이 ADD BX,2 또는 INC BX INC BX에 의해 수행 될 수 있었다) 테이블의 항목을 가리 키도록 BX 2를 추가 '1'AH에서 '2'입니다.

루프의 종료 조건은 AH'9'에서부터 ':' 또는 '9'+1으로 증가 할 때입니다. 해당 최종 조건에 도달하지 않은 경우 모든 값 '1' .. '9'이 테스트 될 때까지 루프를 돌아 다니십시오. PNAME에 아직 도착하지 않은 경우 문자 입력이 허용되지 않았기 때문에 오류가 발생하므로 오류 메시지를 가리킨 다음 인쇄하십시오. 아마 당신이 프로그램을 종료 할 것입니다, 그래서 당신에 유래에

MOV AH,4CH 
    INT 21H