assembly - 汇编中的移位字符
问题描述
我有一个 ac 函数,它接收一个字符和一个整数作为参数,并使用整数移动该字符。所以假设字符是“a”,整数是 2,它将返回“c”。我需要做的是在汇编中从用户那里获取字符串和班次数。然后调用我的函数并返回加密的单词。因此,如果单词是 Love 并且班次数为 2,则单词将变为 Nqxg。
我做这件事的时候最糟糕。不知道该怎么做我已经尝试了很多东西。
当我跑的时候,第一封信就来了。所以至少有些东西在起作用。我确定是关于尺寸的,我对组装很陌生,但仍在尝试了解寄存器的工作原理。我也不知道如何将我的字符附加到我的字符串中
任何人都可以尝试修复我的轮班子程序吗?谢谢
这就是我所拥有的:
extern printf, scanf
extern encrypt
global _start
section .data
format db '%ld',0
format3 db "%s ",0
message1: db "1. Input New Message",10,0
message2: db "Enter a number of shift:",10,0
section .bss
getMessage: resq 1
shiftNum resq 1
encrypted resq 1
len: equ $ - getMessage
base: equ getMessage - 4
section .text
global main
main:
mov rdx, message1
call print
call scanMessage
mov rdx, message2
call print
call scanChoice
mov rdx, getMessage
call print
mov r8, getMessage
mov rbx, [shiftNum]
mov rdx, len
call shift
mov rdx, encrypted
call print
ret
; end main
scanChoice: ;getting the year from user
mov rdi, format
mov rsi, shiftNum
mov rax, 0 ;no xmm registers
call scanf ;calling c function to get input from user
ret
scanMessage:
mov rax, 0
mov rdi, 0
mov rsi, getMessage
mov rdx, len
syscall
ret \
print:
mov rdi,format3
mov rsi,rdx
mov rax,0
call printf
ret
shift:
mov rcx, 0
loop: cmp rcx, rdx ;comparing string length with rcx
jge done
mov rdi, [r8+ rcx*4]
mov rsi, rbx ;number of shifts
call encrypt
mov [encrypted+rcx*4], rax ;appending to string
inc rcx
jmp loop
done:
ret
我的输出:
1. Input New Message
Hello
Enter a number of shift:
4
Hello
L
->这就是即将到来的,而不是利普斯,这将是来自 Hello 的每个字母移动 4 次
解决方案
推荐阅读
- flutter - 如何使用 CustomPainter 绘制矩形画布视图
- javascript - DriveApp createFile 添加未定义到文件
- ios - 在上传应用商店期间分发内容按钮
- php - CSP 阻止谷歌翻译
- hl7-fhir - FHIR - FHIR 规范中的配置资源是什么
- python - 如何在python中重新排列我的数据框
- docker - 有没有办法在 dockerhub 中为每个图像版本提及消息
- react-native - Redux Persist 保存多个数据
- mysql - 在 UITableView 中显示来自 JSON 的数据
- github - 使 github 存储库依赖于另一个存储库