입문 학습 노트 집성(7)-dp,div,dup

미친 여름방학 학습의 모음집 입문 학습노트(7)-dp,div,dup
참고: 왕량 제8장

1.bx,si,di,bp


8086 CPU는 레지스터 4개만 "[...]를 참고하십시오.
bp: 기본 단락 주소가 ss인 것을 제외하고는 bx와 같습니다.
그것들의 모든 정확한 조합
mov ax,[bx]
mov ax,[si]
mov ax,[di]
mov ax,[dp]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp+si]
mov ax,[bp+di]
mov ax,[bx+si+idata]
mov ax,[bx+di+idata]
mov ax,[bp+si+idata]
mov ax,[bp+di+idata]

주의: bx와 bp는 동시에 사용할 수 없습니다. 예를 들어 [bx+bp]는
틀렸어

2. 처리할 데이터의 길이를 가리킨다


단어
byte ptr 표시 바이트
이렇게 하면 레지스터는 데이터의 길이를 직접 지정합니다.
mov ax,1
mov ax,ds:[0]

하지만 다음 예를 보십시오.
assume cs:code,ds:data

data segment
	dw 1111H,1111H,1111H,1111H,1111H,1111H,1111H,1111H
data ends 

code segment
	start:	mov ax,data
		mov ds,ax
		mov ds:[0],1  ;Error
			
		mov ax,4c00H
		int 21H
code ends

end start

이렇게 컴파일하면 오류가 발생합니다. 왜냐하면 컴파일러는 1이 8자리인지 16자리인지 모르기 때문입니다.
향상된 기능:
assume cs:code,ds:data

data segment
	dw 1111H,1111H,1111H,1111H,1111H,1111H,1111H,1111H
data ends 

code segment
	start:	mov ax,data
		mov ds,ax
		mov byte ptr ds:[0],1  ;Error
			
		mov ax,4c00H
		int 21H
code ends

end start

byte ptr나 word ptr를 넣어야 돼요.
byte ptr를 더하면 ds 세그먼트의 값은 0B56:0000 01 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
word ptr를 추가할 때 실행 후 ds 세그먼트의 값은 0B56:0000 0100 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
예:
assume cs:code,ds:data

data segment
	dw 00FFH
data ends 

code segment
	start:	mov ax,data
		mov ds,ax
		inc byte ptr ds:[0]
			
		mov ax,4c00H
		int 21H
code ends

end start

byte ptr ds:[0] 이후 ds:[0] ds:[1] 은 00
inc word ptr ds:[0]로 변경하면 실행 후 ds:[0] ds:[1] 비트 00 01

3. 위령dd,div 명령


위조 명령 dd는 32위,dw는 16위,db는 8위를 나타낸다.예는 아래를 보십시오.
div는 나눗셈 명령, 형식:div 나눗셈
제수는 두 가지가 있는데, 만약 8자리라면, 피제수는 16자리이고,ax에 저장된다.연산 결과: 상인은al에 저장하고 나머지는ah에 저장합니다
만약 제수가 16자리라면 피제수는 32자리이고 낮은 16자리는ax에 놓고 높은 16자리는 dx에 저장한다.연산 결과: 업체는ax에 저장하고 나머지는dx에 저장합니다
피제수는 32자리의 예이다.
assume cs:code,ds:data

data segment
	dd 100001
	dw 100
	dw 0
data ends

code segment
	start:	mov ax,data
		mov ds,ax
		mov ax,ds:[0]
		mov dx,ds:[2]
		div word ptr ds:[4]
		mov ds:[6],ax
			
		mov ax,4c00H
		int 21H
code ends

end start

런타임 ax 03E8H, dx 0001H

4. dup


dd,dw,db와 협조하여 데이터 중복 정의에 사용
예:
db 3 dup (0)
세 바이트를 정의했는데, 모두 0 이며db 0, 0, 0에 해당한다
db 3 dup (0,1,2)
0, 1, 2, 0, 1, 2, 1, 2, 0, 0, 1, 1, 1, 1, 2, 1, 2로 정의된 9바이트
db0,1,2,0,1,2,0,1,2
db 3 dup('abc','ABC')
18개의 문자를 정의했는데, 그것들은 'abcabcabcabcABC' 이다
db'abcabcabcabcabcabcABC'에 해당합니다.

좋은 웹페이지 즐겨찾기