在汇编中附加两个字符串

时间:2019-03-08 02:46:33

标签: linux assembly nasm intel

我们在学校只学会了汇编语言(在课堂上,我的意思是什么,只是理论上讲的寄存器工作原理),我的教授希望我们在汇编语言方面做一些事,而不是加两个整数。我一直在做大量研究,并提出了一些代码。我在Linux VM上使用Microsoft Visual Code。根据我的理解,代码将input1放入ECX,然后将input2放入ECX,然后,如果input1的长度至少为10个字节,则此代码实质上会追加。不完全确定这是如何工作的。如果我的第一个输入使用的字节数少于10个字节,则我的下一个输入将打印在新行上。

如果我正确理解的话,我一直试图了解[变量]和变量,值与地址之间的关系,如何适应该变量并使用保留字节变量。我并没有要求完成我的项目,但我觉得我在盲目尝试,而不是没有方向。预先感谢大家!

section .text

global main        ;must be declared for using gcc
extern printf      ;C library used to print
extern exit        ;C library used to exit
extern scanf       ;C library used to input user entry

main: ;tell linker entry point, called main due to C library usage

;Reads prompt message          
mov eax, 4         ;system call number (sys_write)
mov ebx, 1         ;file descriptor (stdout)
mov ecx, prompt1   ;message to write called prompt
mov edx, len1      ;message length
int 0x80           ;call kernel

;Accept user input
mov eax, 3         ;system call number (sys_read)
mov ebx, 0         ;file descriptor (stdin)
mov ecx, input1    ;variable to read into, i.e. input
mov edx, 25        ;input length
int 0x80           ;call kernel


;Reads prompt message          
mov eax, 4         ;system call number (sys_write)
mov ebx, 1         ;file descriptor (stdout)
mov ecx, prompt2   ;message to write called prompt
mov edx, len2      ;message length
int 0x80           ;call kernel

;Accept user input
mov eax, 3         ;system call number (sys_read)
mov ebx, 0         ;file descriptor (stdin)
mov ecx, input2    ;variable to read into, i.e. input
mov edx, 25        ;input length
int 0x80           ;call kernel


 ;cld
mov al, 0
mov ecx, 50
mov edi, input3
repne scasb
dec edi
mov ecx, 2
mov esi, input4
rep movsb
int 0x80

;Display user input
mov eax, 4         ;system call number (sys_write)
mov ebx, 1         ;file descriptor (stdout)
mov ecx, input1    ;message to write
mov edx, 50        ;message length
int 0x80           ;call kernel



call exit   

section .data

prompt1 db  'Please enter your first string: ', 0xa  ;string to print for user input
len1    equ $ - prompt1                              ;length of string prompt 

prompt2 db  'Please enter your second string: ',0xa  ;string to print for user input
len2    equ $ - prompt2                              ;length of string prompt        

input3: times 10 db  0                               ;variable input is of 10 bytes, null string terminated
input4: times 1  db  0

section .bss

input1 resb 50
input2 resb 25

0 个答案:

没有答案