>source

현재 MASM을 사용하여 DOSBox에서 어셈블리 프로그래밍 (16 비트)을 수행하고 있습니다.

내가 아는 것은 :

이것은 문자열을 선언하는 방법입니다 :

var db 'abcde'

이것은 배열을 선언하는 방법입니다 :

var db 'a','b','c'

I don't know for sure if these are correct, and I'm confused between these two, array and string

mov ah,9
int 21h

Does above code show output string and not output array?


  • 답변 # 1

    모든문자열바이트 배열으로 볼 수 있습니다.

    aString     db "abcdef", 13, 10, "$"
    byteArray   db "a", "b", "c", "d", "e", "f", 13, 10, "$"
    
    

    두 가지를 같은 방식으로 출력 할 수 있습니다 :

    mov     dx, offset aString
    mov     ah, 09h    ; DOS.PrintString
    int     21h
    mov     dx, offset byteArray
    mov     ah, 09h    ; DOS.PrintString
    int     21h
    
    

    이것은 배열의 요소가 메모리에서 서로를 따라 가기 때문에 작동하므로aString의 스토리지와byteArray의 스토리지에는 실질적인 차이가 없습니다.

    차별하는 데 도움이되는 것은 사람들이 배열에 대해 이야기 할 때 문자열에 대해 이야기 할 때 실제 ASCII 코드를 신경 쓰지 않고 배열 요소에 저장된 숫자 값에 주로 관심이 있다는 것입니다. 문자열을 구성하는 문자.

    aString db "abcdef", 13, 10, "$" 에서  a,b, ...
    byteArray db "a", "b", "c", "d", "e", "f", 13, 10, "$" 에서  차라리97,98, ... (보통 우리는 숫자로 시작했을 것입니다!)

    <시간>

    단어 크기의 요소 또는 단어 크기의 요소가있는 배열을 가질 수 있기 때문에 모든배열이 문자열 인 것은 아닙니다.

    byteArray  db 1, 2, 3     <== 3 bytes storage
    wordArray  dw 1, 2, 3     <== 6 bytes storage
    dwordArray dd 1, 2, 3     <== 12 bytes storage
    
    

  • 답변 # 2

    말 그대로 차이가 없습니다. 둘 다 동일한 바이트의 데이터를 출력 파일에 어셈블합니다. (또는 당신이 'd' 를 포함하면 그들은 것입니다  그리고 'e'  "배열"버전에서.)

    MASM의 SIZEOF 인 것 같아  연산자는 선언의 전체 줄을 포함합니다.

    문자열은 배열의 특수한 경우로, 기본적으로 여러 문자를 하나의 db 에 제공하는 편리한 구문입니다.  지시.

    <시간>

    때로 "string"이라는 단어는 0 와 함께 암시 적 길이의 문자열을 의미합니다.  또는 '$'  종결 자로 바이트. 따라서 명시 적 길이의 문자열에 대한 포인터 + 길이 대신단순포인터를 시작에 전달할 수 있습니다.

관련 자료

  • 이전 c# - ASPNET에서 Visual Studio가 사용자 처리 예외에서 중단되지 않음
  • 다음 css - 입력 자동 완성 상자의 색상 변경