어 셈 블 리 기본 프레임 워 크

2011 09 16
질문 
FEES  DW 100 DUP(?)FEES  DW 100 DUP(0)  DUP()          ?DUP   100      100    ?
  100     100         
?          。

질문     ASSUME
예전 에 어 셈 블 리 를 배 울 때 assume 가 무엇 에 쓰 였 는 지 잘 모 르 겠 어 요. 오늘 포럼 에서 찾 아 보 니 한 네티즌 이 이렇게 설명 하 는 것 을 발 견 했 습 니 다.
"데이터 세그먼트 에서 정의 하 는 모든 변수 플래그 는 하나의 오프셋 (유효한 주소 라 고도 함) 을 의미 합 니 다. 이 오프셋 은 데이터 세그먼트 값 과 결합 하면 메모리 주 소 를 가리 킵 니 다. 프로그램 에서 ASSUME 위조 명령 을 사용 하 는 것 은 기본 세그먼트 주 소 를 가리 키 는 것 입 니 다. 특정한 데이터 세그먼트 의 세그먼트 이름 을 특정한 세그먼트 레지스터 에 지정 하면 (예 를 들 어 ASSUME)  DS, DATA 1), 그 이후 이 데이터 세그먼트 (DATA 1) 에 정 의 된 변 수 를 사용 하면 컴 파 일 러 는 자동 으로 이 세그먼트 레지스터 (DS) 의 세그먼트 값 (세그먼트 주 소 를 표시 함) 과 결합 해서 사용 합 니 다. "
 
 
ASSUME CS: CODE, DS: DATA: ASSUME 위조 명령 은 각 논리 세그먼트 가 불 러 와 야 할 주 소 를 가리 키 지만 세그먼트 기본 주 소 를 해당 세그먼트 레지스터 에 불 러 오지 않 았 습 니 다. ASSUME 는 각 세그먼트 레지스터 와 현재 사용 되 고 있 는 논리 세그먼트 의 대응 관 계 를 지적 합 니 다. CS 는 시스템 이 프로그램 을 불 러 온 후 시스템 에서 자동 으로 불 러 옵 니 다. 즉, 운영 체제 의 작업 (프로 세 스) 입 니 다.관리자 가 자동 으로 장 착 을 완 료 했 습 니 다. 이 장 착 은 사용자 가 관리 할 필요 가 없습니다. 스 택 SS 도 사용자 가 장 착 하지 않 아 도 되 고 시스템 에서 자동 으로 장 착 할 수 있 습 니 다. 이 때 는 스 택 세그먼트 의사 명령 을 정의 하 는 과정 에서 매개 변 수 를 모두 써 야 합 니 다.
 
 
1 층 의 말 이 맞습니다. 글 에서 아 이 디 어 를 말 하지 않 았 습 니 다. 쉽게 말 하면 매번 입력 세그먼트 가 접 두 사 를 뛰 어 넘 는 번 거 로 움 을 줄 이기 위해 서 입 니 다. 예 를 들 어 MOV AX, A 는 기본적으로 DS 를 사용 합 니 다. 그러나 A 가 있 는 데이터 세그먼트 가 ASSOME 으로 ES 를 지정 하면 여 기 는 ES 를 사용 합 니 다. 기본 DS 를 사용 하지 않 으 면 MOV AX, ES: A 를 사용 해 야 ES 를 사용 할 수 있 습 니 다. 글 에서 들 은 예 도 좋 지 않 습 니 다.하나의 답장, 명령 에서 변 수 를 사용 하 는 것 은 바로 주소 찾기 방식 입 니 다. 기본 값 은 DS 를 사용 하 는 것 입 니 다. 변수 에 대응 하 는 세그먼트 레지스터 를 ASSUME 로 지정 할 필요 가 없습니다. ES 의 예 를 들 어야 합 니 다. 프로그램 이 하나의 프로그램 세그먼트 와 하나의 데이터 세그먼트 만 있 으 면 ASSUME 가 필요 하지 않 습 니까? 기본 값 은 CS 와 DS 를 사용 하 는 것 이기 때 문 입 니 다.
 
 
ASSUME DS, DATA 1 은 옳지 않 습 니 다. 건물 주 는 ASSUME DS: DATA 1 (일반적으로 data 1 과 같은 식별 자 를 사용 하지 않 습 니 다. data 1 은 논리 적 인 단락 이 아 닌 변수 이름 을 표시 합 니 다) 7 층 정 해 를 해 야 합 니 다. [ASSUME 는 각 단락 의 레지스터 와 현재 사용 되 고 있 는 논리 세그먼트 의 대응 관 계 를 지적 합 니 다].........................................................................................................
자신 이 쓴 책의 첫 번 째 비교적 완전한 예:
잘못 쓴 부분: [1] count EQU 7: count DB 7 【 2 】 잊 어 버 리 고 쓰기: mov ah, 4ch INT 21h 그리고 두 번 째 로 4ch 를 al 에 게 대 입 했 습 니 다. 【 3 】 스 택 세그먼트 를 쓸 때 공간 을 직접 정의 할 수 있 습 니 다. DB 100 h DUP (?) 는 변수 명 [4] LOOP loop 1 의 용법 을 추가 할 필요 가 없습니다. 먼저 loop 1 을 사용 하고 LOOP loop 1 [5] 9 개의 수 를 더 하 는 방법 을 사용 합 니 다. 저 는 'al 을 비우 고 [SI]' 라 고 썼 습 니 다.AL 로 이동 한 후 INC SI, ADD al, [SI] 사실: AL 을 직접 비우 고 ADD, INC SI 를 사용 하면 됩 니 다. CX 는 순환 횟수 를 제어 할 수 있 습 니 다. 이전 방법의 순환 횟수 는 한 번 적 고 cx 값 도 주의해 야 합 니 다.
; add 9 bytes NAME add9bytes qiaoDATA SEGMENT data1 DB 5 dup(1), 11h, 11h count EQU 7 SUM DB ? qiaoDATA ENDS qiaoSTACK SEGMENT STACK DB 100h DUP(?) qiaoSTACK ENDS qiaoCODE SEGMENT      ASSOME DS: qiaoDATA; SS: qiaoSTACK; CS: qiaoCODE START: mov ax, qiaoDATA mov ds, ax; 이 두 마디 는 qiaoDATA 를 DS 세그먼트 에 넣 는 것 입 니 다. 그러나 ASSOME 은 이미 이런 의 미 를 가지 고 있 습 니 다. 여기, 이 두 마디 도 ok 이 필요 없습니다. xor al, al LEA SI, data 1 mov cx, count Loop 1: ADD al, [SI] INC SI LOOP loop loop 1 mov sum, al MOV ah, 4ch INT 21h qiaoCODE ENDS      end start
기타
 
【 6 】 loop 1 은 레이 블 로 NEAE 와 FAR 두 가 지 를 사용 할 수 있 지만 여기 에는 사용 되 지 않 습 니 다. 【 7 】 변 수 는 세 가지 속성 이 있 습 니 다. 세그먼트 속성, 오프셋 속성, 유형 속성, [8] 상수 가 a3h 로 시작 할 때 식별 자로 헷 갈 리 지 않도록 0 으로 시작 해 야 합 니 다. 【 9 】 바이트: BYTE 글자: WORD 두 글자: DWORD 네 글자: QWORD 10 바이트: TBYTE
 
e1.asm
NAME add9bytes qiaoDATA SEGMENT D1 DB 41h, 6dh D2 DW 803ah, 104fh D3 DD 12345678h, 0ABCDEF9H D4 DW 40 DUP(1) qiaoDATA ENDS qiaoSTACK SEGMENT STACK DB 100h DUP(?) qiaoSTACK ENDS qiaoCODE SEGMENT      ASSUME DS:qiaoDATA; SS:qiaoSTACK; CS:qiaoCODE START: mov ax, qiaoDATA mov ds, ax ; real start mov ax, SEG D1 mov bx, SEG D2 mov cx, SEG D3 mov ax, OFFSET D1 MOV BX, OFFSET D2 MOV CX, OFFSET D3 MOV DX, OFFSET D4 mov ax, TYPE D1 MOV BX, TYPE D2 MOV CX, TYPE D3 MOV DX, TYPE D4 mov ax, LENGTH D1 MOV BX, LENGTH D2 MOV CX, LENGTH D3 MOV DX, LENGTH D4 mov ax, SIZE D1 MOV BX, SIZE D2 MOV CX, SIZE D3 MOV DX, SIZE D4 MOV ah,4ch INT 21h qiaoCODE ENDS       end start
SEG 
주소 연산 자
mov ax, SEG D1 mov bx, SEG D2 mov cx, SEG D3, D1, D2 가 DS 데이터 세그먼트 에서 정의 되면 SEG 후 얻 은 값 이 일치 합 니 다.
OFFSET
오프셋 주소 연산 자
mov ax, OFFSET D1 ;0000 MOV BX, OFFSET D2 ;2 MOV CX, OFFSET D3 ;6 MOV DX, OFFSET D4 ;  E=15
TYPE
형식 연산 자가 Byte 라면 = 1 변수 유형: word = 2 dword = 4 qword = 8 tbyte = 10 레이 블 유형: NEAR - 1 FAR - 2
mov ax, TYPE D1 MOV BX, TYPE D2 MOV CX, TYPE D3 MOV DX, TYPE D4
LENGTH
변수 단위 수 (변수 에 포 함 된 단위 개수) 이 연산 결 과 는 다음 과 같 습 니 다. 이 변 수 는 의사 명령 의 첫 번 째 표현 식 형식 을 정의 합 니 다. n UDP () 라면 n 이 고 그렇지 않 으 면 1 입 니 다.
mov ax, LENGTH D1 MOV BX, LENGTH D2 MOV CX, LENGTH D3 MOV DX, LENGTH D4 P. S.: D4 DW 40 DUP (1), 45h, 00h 에 세 가지 정의 가 있 더 라 도 첫 번 째 40 에 따라 대답 할 뿐 입 니 다. 40 = 28H
SIZE
변수 총 바이트 수 (이 연산 법 에 포 함 된 총 바이트 수, 책 에 소 개 된 유사 성: qiaobar DB 10 DUP (1), 11h, 22h 는 12 일 것 입 니 다. 그러나 사실은 제 가 테스트 한 것 은 첫 번 째 변수의 바이트 수, 즉 10 입 니 다.
mov ax, SIZE D1  MOV BX, SIZE D2 MOV CX, SIZE D3 MOV DX, SIZE D4
HIGH
mov al,HIGH 1234h mov al,LOw 1234h
;12 ;34
SHORT
 
그 다음 레이 블 이 단거리 (- 128 ~ 127 사이) 라 는 뜻 이다.
()
우선 순위 변경
 
[]
간접 주소 지정
 
관계 연산 자
 
 
 
 
EQ 대등한 NE 같 지 않 은 LT 는 GT 보다 작 아서 LE < = GE > =

좋은 웹페이지 즐겨찾기