방금 어셈블리 언어를 배우기 시작했고 과제의 목적은 문자열로 표현 된 부호있는 정수를 2의 보수 코드로 변환하는 프로그램을 작성하는 것입니다..string을 어셈블리 언어로 .quad로 변환
우리가해야 할 한 가지는 "10"과 같은 문자열을 입력 할 때 "1"과 "0"처럼 분리하고 변환 2의 보수 인코딩을 수행해야한다는 것입니다. 이것이 올바른 접근법이라고 생각한다면).
그래서이 작은 프로그램을 만들었습니다. "10"의 "1"을 추출하기 위해서였습니다. 여기
어떤 숫자 코드에있는 코드에 대한 의견 레지스터
rax
에 "1"(0x31로 회신)의 문자 코드를 이동합니다.
즉,R[rax] <- M[R[rbx]+0] = M[asc] = 0x31
입니다."0"(0x30)의 문자 코드를
rcx
레지스터로 이동합니다.
이것은R[rcx] <- M[R[rbx]+1] = M[asc+1] = 0x30
입니다."1"(0x31)의 문자 코드를
answ
으로 옮깁니다. 또한, 나는 실제로 무엇이%al
, 내 선생님이 추천한지 잘 모르겠다.
그런 다음 GDB에서 나는 break *main+18
처럼 ret
문에 휴식을 넣고 나서 입력 내가
값이로 변환 할 수없는 오류가 발생 그 후
x/xg $answ
정수
이 문제를 해결하는 방법을 모르겠습니다. 도와 주셔서 감사합니다. 이 프로그램은 다음과 같습니다
.data
asc: .string "10"
answ: .quad
.text
.globl main
main:
mov $asc, %rbx
mov 0(%rbx), %rax #1
mov 1(%rbx), %rcx #2
mov %al, 3(%rbx) #3
ret
가 쉽게 조립 첫번째가 아닌 다른 언어를 사용하게합니다. 예를 들어 C와 같습니다. 그리고 그 말은 strtoul을 사용하지 않습니다. 그러나 문자열을 걷고 알고리즘을 생각해 낸 다음 자연 언어로 알고리즘을 얻은 다음 그 알고리즘을 어셈블리 언어로 코딩하면됩니다. –
내가 알아 내지 못하면 곧 그 일을하고 게시 할 것입니다. – cmptUser
질문 제목을 개선하려면 [편집]하십시오. 지금은 질문이나 문제 설명이 아니라 과제에 대한 암기입니다. 나의 즉각적인 반응은 당신의 과제를 복사/붙여 넣기로 마감하도록 투표하는 것이 었습니다. 제목은 현재 가지고있는 문제 또는 묻고있는 문제를 설명해야하며 검색 결과에 표시 될 때 향후 독자에게 의미가있는 내용이어야합니다. –