从键盘到数组读取10个数字然后将它们写出来我遇到了一个大问题。
mov rcx, arr + qword [n]*8
- 我不知道如何正确修改它,因为实际上它会导致错误。
另外,当我想读取以下数字时,如何设置mov rdx, 1
:12 123 1234不仅仅是数字?
我会感激任何帮助。
global main
section .text
main:
mov rbp, rsp; for correct debugging
mov rdi, 0
_in:
mov rax, 3
mov rbx, 0
mov rcx, arr + rdi*8
mov rdx, 1
int 80h
mov rax, 3
mov rbx, 0
mov rcx, blank
mov rdx, 1
int 80h
inc qword [n]
cmp qword [n], 10
jz _next
jmp _in
inc rdi
_next:
mov qword [n], 0
mov rdi, 0
_out:
mov rax, 4
mov rbx, 1
mov rcx, arr + rdi*8
mov rdx, 1
int 80h
mov rax, 4
mov rbx, 1
mov rcx, nl
mov rdx, 1
int 80h
inc qword [n]
cmp qword [n], 10
jz _end
jmp _out
inc rdi
_end:
mov rax, 1
mov rbx, 0
ret
section .data
arr times 10 dq 0
blank db 0
n dq 0
nl db 10
答案 0 :(得分:0)
关于输入和数据结构。
循环读取每个字符(angular
.module('tessicommunicationApp')
.factory(
'AuthServerProvider',
function loginService($http, localStorageService, $window, $state, $cookies) {
return {
login : function(credentials) {
var data = 'j_username='
+ encodeURIComponent(credentials.username)
+ '&j_password='
+ encodeURIComponent(credentials.password)
+ '&remember-me=' + credentials.rememberMe
+ '&submit=Login';
return $http
.post(
'api/authentication',
data,
{
headers : {
'Content-Type' : 'application/x-www-form-urlencoded'
}
}).success(function(response) {
return response;
});
},
)。输入字符将是例如rdx=1
,字符'1', '2', '3', '4', '5', 10
是新行(也可以检查其他空格字符,如10
,或者甚至可以翻转测试,{{1}中的任何字符1}}范围是数字的结尾)。
在读取数字时,决定是将它们存储为字符串还是数字。
如果是字符串,则将每个新数字写入地址arr + n * 8 + input_char_index的内存中,在数字后面可能将零值作为终止符放置(当前数组最多可容纳7个字符长字符串+ 0表示每个“n” “),或者将字符串长度存储到单独的数组中,或者作为元素的第一个字节存储,并使第一个字符串在长度字节之后等于+1偏移量...(您可以根据需要设计数据结构)。要显示这样的字符串,只需加载它的地址13, 9, 32
并用'0'..'9'
计算它的长度(它读取+按char计算char,直到找到lea rcx,[arr+n*8]
),或加载长度(如果已存储)某处,并且sys_write它。
如果要存储数字,请在输入之前将一些备用寄存器设置为零(例如strlen
),然后对于每个数字读取,请0
rdi
=>那是add rdi,rdi
,然后将输入字符从ASCII数字转换为64b 0-9值,并将其添加到lea rdi,[rdi+rdi*4]
...循环,直到读取非数字或换行符(但64b无符号数将溢出为19+位输入)。在输入结束后,将值存储到rdi *= 10
,现在rdi
将包含数字QWORD值。
要输出它们,你必须在相反的方向进行转换,从数值到一些内存缓冲区,产生数字ASCII字符(具有足够大的缓冲区,再次20+字符对于64b值是安全的)。将您的号码存储在内存中作为ASCII字符串+知道它的长度后,您可以将它SYS_WRITE到stdout。
您还可以考虑先学习一些教程,然后重新阅读一些有关常见数据结构/等,内存,字符串编码,寄存器,x86寻址模式的理论,....在编写自己的代码之前(因为感觉对我而言,你猜得太多了,事情是如何运作的。)