nasm 어셈블리 : 문자열이 두 번 인쇄됩니다.

Ashfaqur Rahman |

NASM 어셈블러에 대한 x86 어셈블리 코드를 다음과 같이 작성했습니다.

hello.asm

[org 0x7c00]

mov bx, HELLO_MSG
call print_string

mov bx, GOODBYE_MSG
call print_string

jmp $

%include "print_string.asm"

HELLO_MSG:
    db 'hello, world',0

GOODBYE_MSG:
    db 'good bye',0

times 510-($-$$) db 0
dw 0xaa55

print_string.asm

print_string:
    mov ah, 0x0e
    push bx

    loop:
        cmp WORD [bx], 0
        je end
        mov al, [bx]
        int 0x10
        inc bx
        jmp loop

    end:
        pop bx
        ret

bochs 2.2.6 에뮬레이터에서 코드를 실행했습니다.

예상되는 outpur

안녕 세상

내가 얻는 출력

안녕 세상 안녕 안녕 안녕

good bye두 번 인쇄됩니까? 또한 뒤에 추가 공간이 있음을 확인하십시오 hello, world. 어디에서 오는가? 주의 : 하나의 문자열 코드 만 인쇄하면 정상적으로 작동합니다.

데이비드 볼 퍼드

당신의 문제는 라인에서 나옵니다

cmp WORD [bx], 0

이것은 "bx가 가리키는 주소에있는 단어를 0과 비교하라"는 의미입니다. 그러나보고있는 문자열은 단어가 아닌 바이트로 구성됩니다. 이 비교가 성공하려면 둘 다 0을 포함하는 행 (일명 단어)에서 2 바이트를 찾아야합니다.

이것은 HELLO_MSG의 끝에서 발생하지 않으므로에서 마침내 쌍을 찾을 때까지 문자를 계속 인쇄하고 다음 문자열 (GOODBYE_MSG)을 통과합니다 times 510-($-$$) db 0.

이것은 또한 실제로 HELLO_MSG 끝에 0을 인쇄하기 때문에 표시되는 추가 공간을 설명합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

어셈블리 언어는 함수 호출로 문자를 두 번 인쇄하지만 직접 실행될 때는 인쇄하지 않습니다.

분류에서Dev

어셈블리 입력 번호 및 인쇄 문자열

분류에서Dev

NASM 어셈블리, 문자열 배열의 처음 4 바이트를 인쇄하는 방법

분류에서Dev

C ++ ifstream; 모든 '\ n'문자가 두 번 인쇄됩니다.

분류에서Dev

NASM 어셈블리의 재귀 적 요인 함수 이해

분류에서Dev

NASM 어셈블리 : 문자열 길이 확인 + 문자열 확인은 '0', '1', '2'로만 구성되어 있습니까?

분류에서Dev

같은 것이 두 번 인쇄됩니다-JS Arrays

분류에서Dev

ARM 어셈블리에서 두 숫자 더하기 및 인쇄

분류에서Dev

문자열 인쇄 (어셈블리)

분류에서Dev

asp.net C #에서 인쇄 할 때 그리드의 두 번째 페이지가 표시됩니다.

분류에서Dev

x86 어셈블리에서 데이터가 스택에 저장되기 전에 ESP가 호출 후 두 번 감소한 다음 푸시됩니까?

분류에서Dev

어셈블리 MIPS : 루프를 사용하여 문자를 5 번 인쇄

분류에서Dev

루프에서 여러 사용자 입력을 인쇄하도록 문자열 변수 재설정 (NASM 어셈블리)

분류에서Dev

NASM-printf가 첫 번째 문자를 인쇄하지 않습니다.

분류에서Dev

nasm 어셈블리 : 1004 회 통과 후 모든 레이블에 유효한 값을 찾을 수 없습니다.

분류에서Dev

쿼리 문자열이 점으로 끝날 때 컨트롤러 작업이 두 번 호출됩니다.

분류에서Dev

스캐너로 입력 읽기; 출력이 두 번 인쇄됩니다.

분류에서Dev

NASM x86_64 Linux 어셈블리에서 문자열의 문자를 다른 문자와 비교하는 방법

분류에서Dev

문자열이 다른 문자열이고 두 번째 문자가 밑줄 + 숫자인지 어떻게 확인할 수 있습니까?

분류에서Dev

어셈블리에서 문자 비교, nasm

분류에서Dev

문자열을 두 번 다른 문자열이 포함되어 있는지 확인

분류에서Dev

어셈블리 NASM 포인터없이 검색 트리를 만들고 작업하는 방법

분류에서Dev

C 이름 정렬 코드를 NASM 어셈블리 코드로 변환하면 충돌이 발생합니다.

분류에서Dev

웹 어셈블리 바이너리가 JavaScript / TypeScript 번들보다 작습니까?

분류에서Dev

문자열을 정수로 변환합니다. Nasm을 사용하는 x86 32 비트 어셈블러

분류에서Dev

masm을 사용하여 80x86 어셈블리 언어로 두 문자열을 연결하는 데 도움이 필요합니다.

분류에서Dev

간단한 8086 어셈블리 문자열 배열 및 인쇄

분류에서Dev

NASM 어셈블리에서 이진 검색의 세그 오류

분류에서Dev

malloc (어셈블리 NASM x86) 이후에 gets 호출

Related 관련 기사

  1. 1

    어셈블리 언어는 함수 호출로 문자를 두 번 인쇄하지만 직접 실행될 때는 인쇄하지 않습니다.

  2. 2

    어셈블리 입력 번호 및 인쇄 문자열

  3. 3

    NASM 어셈블리, 문자열 배열의 처음 4 바이트를 인쇄하는 방법

  4. 4

    C ++ ifstream; 모든 '\ n'문자가 두 번 인쇄됩니다.

  5. 5

    NASM 어셈블리의 재귀 적 요인 함수 이해

  6. 6

    NASM 어셈블리 : 문자열 길이 확인 + 문자열 확인은 '0', '1', '2'로만 구성되어 있습니까?

  7. 7

    같은 것이 두 번 인쇄됩니다-JS Arrays

  8. 8

    ARM 어셈블리에서 두 숫자 더하기 및 인쇄

  9. 9

    문자열 인쇄 (어셈블리)

  10. 10

    asp.net C #에서 인쇄 할 때 그리드의 두 번째 페이지가 표시됩니다.

  11. 11

    x86 어셈블리에서 데이터가 스택에 저장되기 전에 ESP가 호출 후 두 번 감소한 다음 푸시됩니까?

  12. 12

    어셈블리 MIPS : 루프를 사용하여 문자를 5 번 인쇄

  13. 13

    루프에서 여러 사용자 입력을 인쇄하도록 문자열 변수 재설정 (NASM 어셈블리)

  14. 14

    NASM-printf가 첫 번째 문자를 인쇄하지 않습니다.

  15. 15

    nasm 어셈블리 : 1004 회 통과 후 모든 레이블에 유효한 값을 찾을 수 없습니다.

  16. 16

    쿼리 문자열이 점으로 끝날 때 컨트롤러 작업이 두 번 호출됩니다.

  17. 17

    스캐너로 입력 읽기; 출력이 두 번 인쇄됩니다.

  18. 18

    NASM x86_64 Linux 어셈블리에서 문자열의 문자를 다른 문자와 비교하는 방법

  19. 19

    문자열이 다른 문자열이고 두 번째 문자가 밑줄 + 숫자인지 어떻게 확인할 수 있습니까?

  20. 20

    어셈블리에서 문자 비교, nasm

  21. 21

    문자열을 두 번 다른 문자열이 포함되어 있는지 확인

  22. 22

    어셈블리 NASM 포인터없이 검색 트리를 만들고 작업하는 방법

  23. 23

    C 이름 정렬 코드를 NASM 어셈블리 코드로 변환하면 충돌이 발생합니다.

  24. 24

    웹 어셈블리 바이너리가 JavaScript / TypeScript 번들보다 작습니까?

  25. 25

    문자열을 정수로 변환합니다. Nasm을 사용하는 x86 32 비트 어셈블러

  26. 26

    masm을 사용하여 80x86 어셈블리 언어로 두 문자열을 연결하는 데 도움이 필요합니다.

  27. 27

    간단한 8086 어셈블리 문자열 배열 및 인쇄

  28. 28

    NASM 어셈블리에서 이진 검색의 세그 오류

  29. 29

    malloc (어셈블리 NASM x86) 이후에 gets 호출

뜨겁다태그

보관