강사가 특정 프로그램 코드를 제공하여 어셈블리 언어로 버블 정렬 (8086 마이크로 프로세서 지침)을 사용하여 일련의 데이터를 정렬했습니다. 이전의 모든 코드의 경우 내가 구문을 사용했다 :.code/.data와 code/data 세그먼트의 차이점은 무엇입니까?
DATA SEGMENT
<DATA HERE>
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START:
<CODE HERE>
CODE ENDS
END START
내 강사에 의해 주어진 코드는 다음과 같습니다 다음 data segment
및 code segment
각각 .data
및 .code
로 대체 이유
org 100h
.data
array db 9,6,5,4,3,2,1
count dw 7
.code
mov cx,count
dec cx
nextscan:
mov bx,cx
mov si,0
nextcomp:
mov al,array[si]
mov dl,array[si+1]
cmp al,dl
jnc noswap
mov array[si],dl
mov array[si+1],al
noswap:
inc si
dec bx
jnz nextcomp
loop nextscan
mov cx,7
mov si,0
print:
mov al,array[si]
add al,30h
mov ah,0eh
int 10h
mov ah,2
mov dl , ' '
int 21h
inc si
loop print
ret
내가 이해하지 못했다 (분명히) 그 세그먼트를 끝낼 필요가 없다는 것을 의미합니다. 또한 assume
지시문이 없으며 프로그램이 계속 정상적으로 작동합니다. 정말 내가 (나는 잘 알고 있었는지에 변경된 구문) 아래 그림과 같이 프로그램을 수정하는 경우, 프로그램이 작동하지 않았다이었다 혼동 무엇 : 실행하는 동안 위의 코드는 무한 루프에 결과
data segment
array db 9,6,5,4,3,2,1
count dw 7
data ends
code segment
assume ds:data, cs:code
start:
mov ax,data
mov ds,ax
mov cx,count
dec cx
nextscan:
mov bx,cx
mov si,0
nextcomp:
mov al,array[si]
mov dl,array[si+1]
cmp al,dl
jnc noswap
mov array[si],dl
mov array[si+1],al
noswap:
inc si
dec bx
jnz nextcomp
loop nextscan
mov cx,7
mov si,0
print:
mov al,array[si]
add al,30h
mov ah,0eh
int 10h
mov ah,2
mov dl , ' '
int 21h
inc si
loop print
ret
code ends
end start
. 도움이된다면 emu8086을 사용합니다. .data
/.code
과 data segment
/code segment
지시어의 차이점을 이해하고 어느 것을 사용해야하는지에 대한 도움이 필요합니다.
'.org 0100h'은 .com처럼 보입니다. .org 다음에 "jmp start"를 추가하고 첫 번째 명령 (.code 바로 다음) 앞에 "start :"레이블을 추가하십시오. btw : '.com'은 단순화 된 64k 설정을 사용하며 CS = DS라고 가정합니다. – Tommylee2k
죄송합니다. 새 어셈블리입니다. 따라서 ".org 0100h는 무엇을 의미하는지 이해하지 못했습니다. com. " 또한 단순화 된 64k 설정의 의미는 무엇입니까? – 50calrevolver
emu8086으로 무한 루프에 부딪혔을 때, 실제 PC가 아니기 때문에 매우 운이 좋았습니다. (다시 199x에 리셋 버튼을 눌러야하고, OS가 부팅 될 때까지 기다렸다가 모든 물건을 다시로드 할 때까지 기다렸다가 희망을 가지지 않았 으면합니다.) 마지막 버전을 디스크/플로피에 저장하는 것을 잊지 마십시오.) 한편 emu8086에서는 시뮬레이션을 다시 시작하고 단일 명령어 당 디버거에서 단계별로 진행합니다. 아마 세그먼트 레지스터의 셋업은 잘못되었지만 당신의 소스로부터 그것은 당신의 버전이 실제로 강사보다 견고 해 보였으므로, 디버거에서 체크 아웃 할 수 있다면 감사하겠다. mem의'array'는 어디에 있겠는가? . – Ped7g