2015-12-17 7 views
-1

Я работаю над этой проблемой, когда мне нужно ввести первое и последнее имя в одной строке, разделенной пробелом, отображать только последнее имя. Я создал программу, которая, как мне кажется, близка, но вместо подсказки это просто outmsg. Я не уверен, как я могу запросить имя и только последние дисплеи. Я не уверен, что мне нужно только изменить ситуацию. вот код:first and last name Assembly

include irvine32.inc 
title trial 
.data 
outmsg DB "Edward Magruder",0 
Space DB ' ',0 
len DW 0 
.code 
main proc 
mov ebx, offset outmsg 
mov edx, offset outmsg 
call writestring 
call crlf 
sub eax,eax 

mov ecx, lengthof outmsg 
L2: 
mov al,[ebx] 
cmp al, Space 
je goodToGo 
add ebx, 1 
loop l2 
goodToGo: 

add ebx, 1 
showChar: 
mov al, [ebx] 
call writechar 
add ebx, 1 
cmp al, Space 
loop showChar 

Exit 
main endp 
end main 

//output 
//Edward Magruder 
//Magruder 

ответ

0

Ирвина ReadString производит завершается нулем строку, как вы уже используется с outmsg. Поэтому первые изменения минимальны:

... 
.code 
main proc 
lea edx, outmsg    ; Address of an buffer that receives the string 
          ; ... same as `mov ebx, offset outmsg` 
mov ecx, sizeof outmsg  ; Maximal number of characters to read 
call ReadString 
mov ecx, eax    ; Return value (EAX): strlen -> ECX for the loop L2 
xor eax, eax    ; EAX=0 for the loop L2 

mov ebx, offset outmsg  ; EBX points to outmsg for the loop L2 
;mov edx, offset outmsg 
;call writestring 
;call crlf 
;sub eax,eax 

;mov ecx, lengthof outmsg 
L2: 
... 

Следующие шаги могут быть для вывода текста перед входом («Введите имя») с WriteString и определить большую outmsg:

outmsg DB 32 DUP (0)  ; Reserve 32 bytes and fill them with 0 

Что о именах с двумя пробелами («Ричард Милхоус Никсон») или нет места («Ленин»)?