汇编语言 LODS 指令

LODS 指令从存储器加载。如果操作数是一个字节,则将其加载到 AL 寄存器中;如果操作数是一个字,则将其加载到 AX 寄存器中,并将双字加载到 EAX 寄存器中。

在密码术中,凯撒密码是最简单的已知加密技术之一。在这种方法中,要加密的数据中的每个字母都被替换为字母下方固定数量位置的字母。

在这个实例中,让我们通过简单地将其中的每个字母替换为两个字母来加密数据,因此 a 将被 cb 替换为 d 等。我们使用 LODS 将原始字符串 'password' 加载到内存中。

  1. section .text
  2. global _start ;must be declared for using gcc
  3. _start: ;tell linker entry point
  4. mov ecx, len
  5. mov esi, s1
  6. mov edi, s2
  7. loop_here:
  8. lodsb
  9. add al, 02
  10. stosb
  11. loop loop_here
  12. cld
  13. rep movsb
  14. mov edx,20 ;message length
  15. mov ecx,s2 ;message to write
  16. mov ebx,1 ;file descriptor (stdout)
  17. mov eax,4 ;system call number (sys_write)
  18. int 0x80 ;call kernel
  19. mov eax,1 ;system call number (sys_exit)
  20. int 0x80 ;call kernel
  21. section .data
  22. s1 db 'password', 0 ;source
  23. len equ $-s1
  24. section .bss
  25. s2 resb 10 ;destination

结果如下:

  1. rcuuyqtf

分类导航