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

Мне нужно найти среднюю строку, и я застрял, так как я новичок в языке Assembly.Язык ассемблера: Завершение программы, чтобы получить среднюю строку

Ожидаемое поведение:

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

Ведущего пространство, то ч е должны быть удалены из-за вводом номера пользователя.

только Части я получил, чтобы получить входной сигнал от пользователя, который является строкой и число, которое я сохранил в памяти BX, который используется для индексации

мне просто нужно некоторые советы/руководства от вас, ребята, чтобы закончить программу.

+0

SO не подходит для поиска инструкций, но http://stackoverflow.com/tags/x86/info имеет много ссылок на документы и руководства. tip: проверьте документы для системных вызовов, которые вы используете. Довольно точно, что для функции чтения DOS требуется указатель на буфер. Я сомневаюсь, что ваша текущая программа может даже распечатать всю строку. Трейлинг-подстроки тривиальны в строках, заканчивающихся специальным символом: просто передайте указатель на начальную точку, и он все еще заканчивается на том же месте. –

+0

@PeterCordes Спасибо. Извините, чтобы узнать о советах и ​​руководствах. Im действительно действительно путают прямо сейчас о том, как использовать регистры и шестнадцатеричные коды. –

+0

Если вы имеете в виду системные вызовы ah = code DOS, проверьте список прерываний DOS для документов, какие системные вызовы что-то делают. Проблема с серединой строки - это просто указатель математики. –

ответ

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

Как может этот вход работать на всех? В тот момент, когда вы вызываете функцию входа DOS, ваш регистр DX по-прежнему установлен для msg1, когда он должен быть установлен так, чтобы указывать на структуру ввода varName.


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

Что вы ожидаете AL зарегистрировать провести в этой точке? Эта функция DOS не сохраняет там полезного значения!

Смежные вопросы