2016-09-17 4 views
-2
.model small 
.stack 
.data 
     msg1 db "Enter string max of 9 characters: $" 
     msg2 db 13,10, "Enter a number: $" 
     msg3 db 13,10, "Midstring: $" 

strNine db "$" 
num db 0,"$" 
mid db "$" 

varName label byte 
maxL db 10 
actL db 0 
actCont db 10 dup("?") 

.code 
     mov ax,@data 
     mov ds,ax 

     ;-------------------- Input String --------------------- 
     mov ah,9 
     lea dx,msg1 
     int 21h 

     mov ah,0ah 
     int 21h 

     mov strNine,al 
     mov bh,strNine 

     ;-------------------- Number --------------------- 
     mov ah,9 
     lea dx,msg2 
     int 21h 

     mov ah,1 
     int 21h 

     mov num,al 
     mov bl,num 

     ;-------------------- Midstring --------------------- 
     mov ah,9 
     lea dx,msg3 
     int 21h 


mov ah,4ch 
int 21h 
END 

어셈블리 문자열을 처음 접했으므로 중앙 스트링을 찾아야합니다.어셈블리 언어 : 중간 스트링을 얻기위한 프로그램 완료

예상 동작 :

Enter max of 9 String: helloword 
Enter a number: 3 
Midstring: lloword 

선행 공백의 시간 및 전자 때문에 사용자에 의해 입력 된 숫자의 삭제한다.

얻었다는 I의 한 색인

나는 단지 필요한 몇 가지 팁/가이드에 사용되는 내가 BX 메모리에 저장 한 문자열과 숫자가 사용자로부터 입력을 얻는 것입니다 유일한 부분 너희들로부터 프로그램을 끝내라.

+0

SO가 가이드를 요청하기에 적합한 장소가 아니지만 http://stackoverflow.com/tags/x86/info에는 문서 및 가이드 링크가 많이 있습니다. 팁 : 사용중인 시스템 호출에 대한 문서를 확인하십시오. DOS 읽기 문자열 함수가 버퍼에 대한 포인터를 필요로하는지 확실히 확인하십시오. 나는 현재의 프로그램이 심지어 전체 문자열을 인쇄 할 수 있을지 의심 스럽다. 후행 부분 문자열은 특수 문자로 끝나는 문자열에서 자주 발생합니다. 시작 지점에 대한 포인터를 전달하면 여전히 같은 위치에서 끝납니다. –

+0

@PeterCordes 감사합니다. 팁이나 가이드를 가져 가서 죄송합니다. 임은 레지스터와 16 진수 코드를 사용하는 방법에 대해 지금 당장 혼란스러워합니다. –

+0

아아 = 코드 DOS 시스템 호출을 의미하는 경우 시스템 호출이 수행하는 작업에 대한 문서의 DOS 인터럽트 목록을 확인하십시오. 중간 문자열 문제는 포인터 수학에 불과합니다. –

답변

1
mov ah,9 
lea dx,msg1 
int 21h 
mov ah,0ah 
int 21h 

방법이 입력 작업을 모두 할 수 있습니까? 현재 DX 입력 함수를 호출 할 때 DX 레지스터는 msg1으로 설정되고 varName 입력 구조를 가리 키도록 설정해야합니다.


mov ah,0ah 
int 21h 
mov strNine,al 
mov bh,strNine 

당신은 AL이 시점에서 개최 등록 무엇을 기대 하는가? 이 DOS 함수는 유용한 값을 거기에 저장하지 않습니다!