2016-09-17 51 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 

最領先的空間,H和E應因爲由用戶輸入的號碼的刪除。

只有一部分得到[我已是擺脫這便是用於索引

我只是需要一些技巧/指導,使我已經保存在BX內存的字符串和數字用戶輸入從你們那裏完成該計劃。

+0

SO不適合尋求指南,但http://stackoverflow.com/tags/x86/info確實有很多指向文檔和指南的鏈接。提示:檢查您正在使用的系統調用的文檔。很確定DOS讀取字符串函數需要一個指向緩衝區的指針。我懷疑你當前的程序甚至可能打印整個字符串。在由特殊字符終止的字符串中,尾隨子串是微不足道的:只傳遞一個指向開始點的指針,它仍然在同一個地方結束。 –

+0

@PeterCordes謝謝。對不起,要求提供提示或指南。我現在對如何使用寄存器和十六進制代碼很困惑。 –

+0

如果你的意思是代碼爲DOS的系統調用,請查看DOS中斷列表以獲取有關係統調用做什麼的文檔。中間字符串問題只是指針數學。 –

回答

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

哪有這個輸入的工作呢?在您調用DOS輸入函數的那一刻,當DX寄存器設置爲指向varName輸入結構時,仍將其設爲msg1


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

你有什麼期望AL寄存器在這一點上持有?這個DOS函數不會在那裏存儲一個有用的值!