2016-06-19 2 views
0

방금 ​​어셈블리 언어를 배우기 시작했고 과제의 목적은 문자열로 표현 된 부호있는 정수를 2의 보수 코드로 변환하는 프로그램을 작성하는 것입니다..string을 어셈블리 언어로 .quad로 변환

우리가해야 할 한 가지는 "10"과 같은 문자열을 입력 할 때 "1"과 "0"처럼 분리하고 변환 2의 보수 인코딩을 수행해야한다는 것입니다. 이것이 올바른 접근법이라고 생각한다면).

그래서이 작은 프로그램을 만들었습니다. "10"의 "1"을 추출하기 위해서였습니다. 여기

어떤 숫자 코드

  1. 에있는 코드에 대한 의견 레지스터 rax에 "1"(0x31로 회신)의 문자 코드를 이동합니다.
    즉, R[rax] <- M[R[rbx]+0] = M[asc] = 0x31입니다.

  2. "0"(0x30)의 문자 코드를 rcx 레지스터로 이동합니다.
    이것은 R[rcx] <- M[R[rbx]+1] = M[asc+1] = 0x30입니다.

  3. "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 
+0

가 쉽게 조립 첫번째가 아닌 다른 언어를 사용하게합니다. 예를 들어 C와 같습니다. 그리고 그 말은 strtoul을 사용하지 않습니다. 그러나 문자열을 걷고 알고리즘을 생각해 낸 다음 자연 언어로 알고리즘을 얻은 다음 그 알고리즘을 어셈블리 언어로 코딩하면됩니다. –

+0

내가 알아 내지 못하면 곧 그 일을하고 게시 할 것입니다. – cmptUser

+0

질문 제목을 개선하려면 [편집]하십시오. 지금은 질문이나 문제 설명이 아니라 과제에 대한 암기입니다. 나의 즉각적인 반응은 당신의 과제를 복사/붙여 넣기로 마감하도록 투표하는 것이 었습니다. 제목은 현재 가지고있는 문제 또는 묻고있는 문제를 설명해야하며 검색 결과에 표시 될 때 향후 독자에게 의미가있는 내용이어야합니다. –

답변

1

귀하의 질문에 대답하려면

  • %al (및 %ar)이 레지스터입니다. 여기 좋은 다이어그램이다 :

    • RAX는
    • EAX는
    • AX는
    • AL 하부 8 비트 하위 16 비트 32 비트 값이 64 비트 값
    • AH는 비트 8에서 15 (0부터 시작)
  • "0"의 ASCII 문자는 0x30입니다. "1"의 ASCII 문자는 0x31입니다. 따라서 1과 0의 문자열은 다음과 같습니다. 0x30303130...

  • 이유는 x/xg $answ이 오류를 발생시키는 이유는 gdb 구문 오류 때문입니다.ALSO

: 여기에 좋은 "치트 시트"의 조나단 Barlett에 의해,

  • "처음부터 프로그래밍"는 멋진 자원이다 . 그리고 그것은 완전히 무료입니다 - 그는 온라인 전체 텍스트를 게시 :

http://savannah.nongnu.org/projects/pgubook/

+0

당신은 "x/xg $ answ"이 나의 유일한 실수라고 말하고있다. – cmptUser

+0

아니, 나는 단지 구체적인 질문에 답하고 있었다. 주요 문제는 여전히 서명 된 문자열을 해당 비트로 변환하는 방법을 찾는 것입니다. 양수는 쉽습니다. 한 번에 한 바이트 씩 작업하고 "0x30"을 빼고 그 결과를 결과로 옮깁니다. 음수는 조금 어렵습니다. 예를 들어 "-1"은 "1"과 완전히 다른 비트 패턴을가집니다. 제안 : 처음에 1의 양수, 0..9로 작업하십시오. PGU 책도보십시오. – paulsm4

+0

나는 그 임무를 아직까지 수행하지 않았다. 나는 먼저 각 캐릭터를 헤어질 필요가 있다고 생각했다. 그리고 나서 그 캐릭터를 알아 냈을 때, 나는 그들을 개종시키는 작업을 할 것이다. – cmptUser