입문 학습 노트 집성(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'에 해당합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Why does there exist DB_UNKNOWN directory on ASM disk?
Today I found a glitch about my database instance.When I browsed my files on ASM disks,I found this file,which path was ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
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]
단어
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'에 해당합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Why does there exist DB_UNKNOWN directory on ASM disk?
Today I found a glitch about my database instance.When I browsed my files on ASM disks,I found this file,which path was ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
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
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'에 해당합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Why does there exist DB_UNKNOWN directory on ASM disk?Today I found a glitch about my database instance.When I browsed my files on ASM disks,I found this file,which path was ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.