디버그의 용법.
DEBUG 는 메모리 내 어느 곳에서나 바이트를 검사하고 어느 곳에서나 바이트를 수정할 수 있는 프로그래머의 프로그램 디버깅 도구인 DOS 유틸리티입니다. 한 번에 하나씩 프로그램을 실행하여 프로그램의 정확성을 확인하는 데 사용할 수 있습니다. 또한 실행 프로세스를 추적하고, 명령 실행 전후의 값을 비교하고, 메모리의 데이터 범위를 비교 및 이동하고, 파일 및 디스크 섹터를 읽고 쓸 수 있습니다.
디버깅은 모든 데이터를 바이트 시퀀스로 취급합니다. 따라서 모든 유형의 파일을 읽을 수 있습니다. DEBUG 는 16 진수 데이터와 ASCⅱⅱ II 코드 문자의 두 가지 데이터를 인식합니다. 표시 형식은 각 바이트의 16 진수 값과 값이 32 에서 126 사이인 바이트에 해당하는 ASCⅱII 코드 문자입니다.
디버깅에는 두 가지 방법, 즉 프롬프트와 비프롬프트의 두 가지 방법으로 데이터를 입력할 수 있습니다. 프롬프트 방법을 사용할 때 데이터를 입력하는 명령을 입력한 다음 데이터를 입력할 주소를 입력할 수 있습니다. 그런 다음 사용자는 이 곳에서 기존 내용과 콜론 힌트를 볼 수 있습니다. 이 시점에서 프롬프트에서 새 값을 입력하거나 enter 또는 CTRL+C 를 눌러 짧은 수평 (-) 프롬프트로 돌아갈 수 있습니다. 프롬프트를 표시하지 않는 방법을 사용할 경우 가져올 데이터의 저장 주소와 입력할 바이트를 입력할 수 있습니다. 그러나 워드 프로세서나 텍스트 편집기를 사용할 때와 달리, 디버그를 사용할 때는 커서를 진입점으로 직접 이동하여 데이터를 입력하거나 수정할 수 없습니다. 대신 한 번에 하나 이상의 바이트를 입력합니다.
DEBUG 를 사용할 때는 메모리의 데이터만 포함할 수 있으므로 일반적으로 처리할 메모리 주소를 지정합니다. 주소는 [세그먼트 주소]: [오프셋] 형식으로 입력합니다. 주소를 입력하지 않으면 디버깅은 100H 주소의 바이트로 시작하는 현재 메모리 세그먼트를 사용합니다. 첫 번째 100H 바이트는 프로그램 세그먼트 접두사에 예약되어 있으며, 이 특수 영역은 DOS 와 프로그램 간의 연결을 설정하는 데 사용됩니다. DEBUG 는 항상 4 개의 16 진수를 사용하여 주소를 나타냅니다. 16 진수 데이터를 두 자리 숫자로 표현합니다.
이 시점에서, 여러분은 DEBUG 에 대해 초보적인 이해를 가지고 있어야 하지만, 이것만으로는 충분하지 않다는 것을 알고 있습니다. 다음으로 DEBUG 의 명령 형식과 명령에 대해 이야기하겠습니다. 입력시
디버깅
디버거를 호출하면 사용자가 간단한 수평 프롬프트 뒤에 디버거 명령을 입력할 수 있는 간단한 수평 프롬프트가 나타납니다. 일부 디버그 명령은 메모리 주소를 표시하고 콜론을 프롬프트로 생성합니다. 이러한 프롬프트가 나타나면 새 값을 입력하여 표시 위치의 원래 값을 변경할 수 있습니다. 새 값을 입력하는 대신 Enter 키 또는 CTRL+C 를 누르면 원래 값이 변경되지 않습니다.
일반적으로 주소를 명령 이름과 분리할 필요가 없습니다. 예를 들어 dump 명령 d 를 사용하여 100 주소의 데이터를 보는 경우 다음과 같은 경우에 명령을 입력할 수 있습니다.
D 100
D 100
D. 100
D, 100
입력 명령에 오류가 있으면 DEBUG 는 다음 행에 오류가 발생한 위치를 표시합니다. 예를 들면 다음과 같습니다.
-s 100 d 12
에러
디버그 명령 및 기능은 다음과 같습니다.
* [주소] 어셈블리 명령
기능: 명령어를 기계 코드로 직접 조합하고 메모리를 입력합니다.
참고: 애플릿을 컴파일하고 대상 프로그램을 수정하는 데 사용됩니다. 입력한 모든 숫자는 16 진수이고 사용자가 메모리에 로드하는 어셈블리 문은 연속적으로 저장됩니다. 주소가 지정되지 않았고 이전에 assembly 명령을 사용하지 않은 경우 수정된 문은 CS:0 100 영역으로 어셈블됩니다.
* C[ 소스 주소 범위] [대상 주소] 비교 명령
기능: 두 저장소의 내용을 비교하고, 다를 경우 해당 주소와 내용을 표시합니다.
* D[ 주소] 또는 D[ 시작 주소] [대상 주소] 덤프 명령.
기능: 메모리의 정보를 메모리 이미지로 표시합니다.
설명: Dump 는 왼쪽 및 오른쪽 두 부분으로 메모리 미러의 내용을 표시합니다. 왼쪽은 16 진수, 오른쪽은 ASCII 문자입니다. 인쇄 불가능한 모든 문자는 마침표 () 로 표시됩니다. ) 는 말했다. 각 행에는 16 바이트가 표시되고 8 번째 바이트와 9 번째 바이트 사이에 하이픈이 있습니다. 이 명령의 암시적 세그먼트 주소는 DS 값입니다. 시작 주소를 지정하지 않으면 d 명령은 표시된 마지막 셀의 다음 셀부터 표시합니다. 이전에 D 명령을 사용한 적이 없다면 표시는 초기화된 세그먼트 레지스터의 내용부터 주소 오프셋 0 100H 를 더한 것으로 시작됩니다.
* E[ 주소] [바이트 문자열] 메모리 수정 명령
기능: 지정된 주소에서 메모리 값을 수정합니다.
참고: 주소 섹션에 오프셋만 입력된 경우 E 명령은 해당 세그먼트가 DS 레지스터에 포함된 것으로 간주합니다. 두 가지 명령 형식이 있습니다. 하나는 지정된 주소로 시작하는 여러 바이트의 내용을 명령에 포함된 바이트 문자열로 바꾸는 것입니다. 둘째, 명령 뒤에 바이트 문자열이 없으면 바이트를 순서대로 표시하고 수정할 수 있습니다. 스페이스바를 눌러 다음 바이트의 내용을 표시합니다. 수정하려면 해당 값을 직접 입력할 수 있습니다.
* F[ 주소 범위] [바이트 또는 바이트 문자열] 채우기 명령
기능: 주소 범위에 지정된 메모리에 채울 바이트 또는 바이트 문자열을 채웁니다.
* G[= 시작 주소] [[중단점] ...] 명령을 실행합니다.
기능: 디버깅 중인 프로그램을 실행하고 중단점에 도달하면 실행을 중지하고 레지스터 플래그와 실행할 다음 명령을 표시합니다.
참고: 시작 주소를 지정하지 않으면 현재 지시어 주소는 CS 및 IP 레지스터의 내용에 의해 결정됩니다. 사용자가 시작 주소를 지정하면 지정된 시작 주소에서 실행이 시작됩니다. 중단점을 지정하면 명령이 명령 주소에 도달하면 실행이 중지되고 각 레지스터 플래그 비트의 내용과 실행할 다음 명령이 표시되므로 사용자가 최대 10 개의 중단점을 설정할 수 있습니다.
* H[ 숫자] [숫자] 16 진수 산술 연산 명령
기능: 각각 두 개의 16 진수의 합과 첫 번째와 두 번째 숫자의 차이를 표시합니다.
설명: 사용자를 위한 간단한 16 진수 연산을 완료합니다.
* I[ 포트 주소]
함수: 지정된 포트에서 1 바이트를 입력하고 표시합니다 (16 진수).
* L[ 주소] [디스크 번호:] [논리 섹터 번호] [섹터 번호]
기능: 파일이나 디스크의 절대 섹터를 메모리로 로드합니다.
참고 단일 l 명령은 최대 80H 개의 섹터를 로드할 수 있습니다. 여기서 디스크 번호는 0, 1, 2,3 ... 각각 a, b, c, ... 디스크 읽기 오류가 발생하고 오류 메시지가 표시됩니다.
* M[ 주소 범위] [시작 주소] 데이터 전송 명령
기능: 주소 범위 내 저장 장치의 내용을 시작 주소의 지정된 주소로 이동합니다.
참고: 전송 중 소스 영역과 대상 영역이 부분적으로 겹칠 수 있습니다. 소스 영역 데이터는 전송 후에도 변경되지 않습니다.
* N[ 디스크 번호:] [경로] [파일 이름] [확장자]
기능: 작업 파일 이름을 정의합니다.
참고: 두 개의 작업 파일을 동시에 정의할 수 있으며 후속 L 및 W 명령 작업에 사용할 수 있도록 CS:5C 및 CS:6C 스토리지에서 구성된 파일 제어 블록을 설정할 수 있습니다.
* O[ 포트 주소] [데이터] 출력 명령
기능: 지정된 출력 포트로 바이트를 보냅니다.
* P[= 주소] [데이터] 처리 명령
기능: 하위 프로그램 호출 명령, 루프 명령, 인터럽트 명령 또는 반복 문자열 명령의 다음 명령을 중지합니다.
설명: 하위 프로그램 호출 명령, 루프 명령, 인터럽트 명령 또는 반복 문자열 명령을 실행할 때 p 명령을 실행하여 관련 명령을 실행하고 실행할 다음 지시어를 반환합니다. P 명령은 t 명령의 구문과 같습니다.
* Q 명령을 종료합니다.
* R[ register] 레지스터 명령
기능: 1. 단일 레지스터의 내용을 표시하고 수정 기능을 제공합니다. 둘째, 모든 레지스터의 내용, 문자 플래그 비트의 상태 및 실행할 다음 명령이 표시됩니다. 셋째, 8 개의 플래그 비트 상태를 표시하고 수정 기능을 제공합니다.
* S[ 주소 범위] [문자열]
함수: 지정된 주소 범위에서 지정된 문자열을 찾습니다.
설명: 조회 주소 범위 내의 문자열을 지정할 수 있습니다. 발견된 경우 주소가 표시되고, 그렇지 않은 경우 디버그 프롬프트가 직접 표시됩니다. 암시적 주소는 DS 세그먼트 값입니다.
* T[= 주소] [명령 수] 명령 추적
기능: 프로그램 실행을 하나씩 추적하며 각 명령 실행이 완료되면 각 레지스터의 내용이 표시됩니다.
주: 일반적으로 하나의 지시어를 추적하지만 한 번에 여러 지시어를 추적할 수 있도록 지시어 수를 설정할 수도 있습니다. 각 명령을 실행한 후 모든 레지스터의 내용과 플래그 상태가 표시됩니다.
* U[ 시작 주소] 또는 [주소 범위]
기능: 메모리의 내용을 어셈블리 문으로 변환합니다.
참고: 디스어셈블된 바이트 수는 사용자의 시스템 표시 형식과 u 명령에 사용된 옵션에 따라 달라집니다.
* W[ 주소] [드라이브 문자:] [시작 섹터] [섹터 번호] 쓰기 명령
기능: 수정된 데이터를 디스크에 씁니다.
참고 디스크에 지정된 메모리 주소에서 데이터 쓰기를 시작하거나 매개변수를 지정하지 않고 디스크에 디버그 파일을 쓸 수 있습니다.