2017-01-18 4 views
-1

Это то, что я уже успел сделать до сих порНаписать входной строки реверс на Assembley

Data Segment 
str1 db 'String_Reverse','$' 
strlen1 dw $-str1 
strrev db 20 dup(' ') 


MSG1 DB 10,13,'ENTER ANY STRING :- $' 
MSG2 DB 10,13,'ENTERED STRING IS :- $' 
MSG3 DB 10,13,'REVERSED STRING IS : $' 

MSG4 DB 10,13,'REVERSED STRING IS : $' 

P1 LABEL BYTE 
M1 DB 0FFH 
L2 DB ? 
P11 DB 0FFH DUP ('$') 
Data Ends 

CUCU MACRO MSG ;MACRO care afiseaza un mesaj dorit 
MOV AH,9 
LEA DX,MSG 
INT 21H 
ENDM 

Code Segment 
Assume cs:code, ds:data 
Begin: 

MOV AX,DATA 
MOV DS,AX 

CUCU MSG1 ;afisare msg1 

LEA DX,P1 
MOV AH,0AH 
INT 21H 

CUCU MSG2 ; afisare msg2 

CUCU P11 ; afisare string introdus 

CUCU MSG3 


mov ax, data 
mov ds, ax 
mov es, ax 
mov cx, strlen1 
add cx, -2 
lea si, P11 
lea di, strrev 
add si, strlen1 
add si, -2 
L1: 
mov al, [si] 
mov [di], al 
dec si 
inc di 
loop L1 
mov al, [si] 
mov [di], al 
inc di 
mov dl, '$' 
mov [di], dl 
Print: 
mov ah, 09h 
lea dx, strrev 
int 21h 
Exit: 
mov ax, 4c00h 
int 21h 
Code Ends 
End Begin 

На данный момент у меня есть str1 и она отображается в противоположном направлении, но мне нужна переменная P11 будет показано в противоположном направлении, что я получить с клавиатуры. Из того, что я видел до сих пор, мне нужно strlen (P11), но я понятия не имею, как это получить.

+0

Знаете ли вы, как закодировать его в C (без stdlib)? Можете ли вы написать алгоритм или блок-схему для этого? PS: комментируйте свой код (на английском языке), особенно если вы хотите, чтобы другие помогли. – Jester

ответ

1
LEA DX,P1 
MOV AH,0AH 
INT 21H 

Это, где ваши данные исходят. Так почему бы вам не проверить documentation about it?

Перед вызовом памяти на M1 (кстати, почему две метки, и оба бессмысленны?) Содержит:

FF ?? 24 24 24 24 24 ... (255 из 0x24 '$' байт).

Это ??, я бы предложил установить его на 0 перед вызовом int, поскольку вы не предоставляете никаких «предыдущих входных данных». mov byte ptr[dx+1],0 (после lea).

При вводе строки «AAAB», то DOS вернется в память этого:

FF 04 41 41 41 42 0D 24 24 24 ...

Так как вы можете видеть, вы можете прочитать L2 байт, чтобы получить фактическую длину строки без CR , или вы можете сделать strlen сканирование функции для 13 в буфере.

Я не уверен, в чем был вопрос, если он есть, но вы заявили, что понятия не имеете, это выше должно дать вам хотя бы две идеи, как продолжить.

В качестве примечания стороны, прекратите использование бессмысленных ярлыков, очень трудно «прочитать источник», и это то, что вы будете делать большую часть времени.

Также, если проверка документации не удалась, вы можете попытаться изменить ее в отладчике. Например, это содержимое памяти после вызова int 21h является самоочевидным (но я по-прежнему предпочитаю сначала проверять документацию). Тем не менее вы должны иметь возможность остановиться после int 21h и заглянуть в память. Если вы этого не сделаете, вы делаете это неправильно, и получите отладчик + узнайте, как его использовать.

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