Я беру этот класс HLA, и я совершенно заблудился, как исправить этот код.Любая помощь приветствуется.
Код должен вводить строку и выводить символы, сдвинутые на 13 значений ascii.Код должен обернуться вокруг.например, после буквы «z» она возвращается к «a».В коде есть ошибки и встроенные пробелы, которые нужно исправить.
/* ----------------------------------------------------------
shift13.hla.pseudocode - a standard input loop doing char-by-char
input from stdin, terminates when the system generates an
eof or the typist presses ^D.
As you work:
1. GET IT RUNNING
2. MAKE IT CORRECT
3. ENJOY IT
4. THEN MAKE IT LOWER-LEVEL (cmp for if, etc) ;
---------------------------------------------------------- */
program shift13 ;
#include ("stdlib.hhf")
#include ("chars.hhf")
#include ("stdin.hhf")
var c : char ;
h : qword; // standard input stdin.handle() ; mv (EAX, h) ;
begin shift13 ;
try
// priming read
stdin.read( c, 1) ;
// input loop
for....
//handle uppercase letters
if (c in 'A' .. 'Z') then
add (32,.... // reduce to lower case
endif ;
//handle lowercase letters
if (c in 'a' .. 'z') then
// clear ax
// move c into al (byte into byte: consistent sizes
// subtract the value of 'a' from the char
// add the shift to the thcar
if (al > 25) then
// if it's now > the number of chars in the alphabet, subtract 25
endif;
// normalize the number back to a lowercase letter by add(....)
mov (al, c) ; //copy the letter back to the variable it came from
endif ;
stdout.putc(c) ; // whether you've changed it or not, print it.
stdin.flushInput() ; //
read another character
//if nothing read, it contains zero
cmp (eax, 0) ; // cmp == sets z flag
if (@z) then
raise (ex.EndOfFile) ; // kinda nice, civilized way to terminate the loop
endif ;
endfor ;
exception (ex.EndOfFile) ;
stdin.eoln() ;
//stdout.put("reached end of file" , nl ) ;
exit shift13 ;
endtry ;
end shift13 ;