어셈블리 언어 (왕쌍) 제 VI

장 VI

코드 세그먼트 6.1 사용 데이터

다음 여덟 프로그래밍 및 데이터 레지스터 AX에 결과 축적 순환 방식

사이클을 사용하려면, 우리는 연속적인 메모리 유닛 그룹에서 해결해야 우리가 프로그램의 데이터 처리에 정의 할 수 있도록, 앞서 언급 한 데이터 스토리지 시스템은 공간의 이상 할당 허용되어야한다, 이러한 데이터는 결국 프로그램의 일부가 될 것입니다 작성된 실행 파일 후, 실행 파일이 메모리에로드, 이러한 데이터는 자연스럽게 저장 공간을 얻을 것이다

assume cs:code

code segment
	
	dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
	
	mov bx,0
	mov ax,0
	
	mov cx,8
  s:add ax,cx:[bx]
  	add bx,2
  	loop s
  	
  	mov ax,4c00H
  	int 21H
  	
code ends

end

DW는 코드의 코드 섹션 때문에, 메모리 부 16 바이트를 차지하고, 여덟 개 폰트 데이터를 정의하는 폰트 데이터의 의미를 정의하는 것, 및 코드 세그먼트의 시작, CS의 주소를 정의하고 0 , CS : 2.CS : 4 ...... 등등

U 자에서 디버그 명령은, 이러한 데이터는 당신이 첫 번째 실제 명령을 실행하려면 다음 문제가있는 것, 당신이 있기 때문에, IP, 이러한 방법으로, 직접 컴파일, 링크의 값을 변경 한 후 실행해야, 어셈블리 명령어로 변환됩니다 처음에 0 IP, 코드 요구 변경할 수 있도록

assume cs:code

code segment
	
	dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
	
    start:  mov bx,0
            mov ax,0

            mov cx,8
          s:add ax,cx:[bx]
            add bx,2
            loop s

            mov ax,4c00H
            int 21H
  	
code ends

end start

최종 지침뿐만 아니라 컴파일러 프로그램의 끝을 알 수에서뿐만 아니라 컴파일러 프로그램 항목 곳을 알릴 수

어떻게 CPU CS 설정하는 방법 : 첫 번째 명령에 지점에 IP 것은 실행 파일의 설명 정보, 위의 절차 지정된 항목 끝 시작 주소 오프셋 주소 10H로 표시되는, 실행되는,이 정보에 저장 될 수있다 실행 파일 로더는 정보 CS의 기초를 설정합니다 : IP를

6.2을 사용하여 스택 코드 세그먼트

스택을 사용 역순에 저장된 프로그램 데이터에 정의 된

assume cs:codesg

codesg segment

	dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
	
	dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	;再定义16个字型数据,程序加载后
										;取得16个字的内存空间
										;后面的程序将这段空间当作栈来使用

    start:	mov ax,cs
            mov ss,ax
            mov sp,30H	;将cs:10~cs:2F的内存空间当作栈
            			;注意栈顶的设置方法
            
            mov bx,0
            mov cx,8
          s:push cs:[bx]
            add bx,2
            loop s	;将代码段0~15单元8个字型数据入栈
            
            mov bx,0
            mov cx,8
         s0:pop cs:[bx]
            add bx,2
            loop s0	;依次出栈8个字型数据,达到逆序存放的目的
            
            mov ax,4c00H
            int 21H
            
codesg ends

end start

우리는 DW의 역할을 설명하면, 모두가 데이터를 정의하는데 사용되는 상기 그것이라고 할 수있는 8 개 폰트 데이터의 정의가 8 개 개의 메모리 워드를 열었다 최종 효과는 동일한 메모리 공간을 열이라고 할 수있다 공간

운동 :

0 순차적 메모리 : 0 내지 0 : 15 단위의 함유량은 스택 데이터를 전송함으로써, 데이터 프로그램을 재 기입 스택 공간은 프로그램에 제공된다

assume cs:codesg

codesg segment

	dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
	dw 0,0,0,0,0,0,0,0,0,0	;10个字单元用作栈空间
	
	start:	mov ax,cs
			mov ss,ax
			mov sp,24H
			
			mov ax,0
			mov ds,ax
			mov bx,0
			
			mov cx,8
		  s:push [bx]	;先把0:[bx]处的数据入栈
		    pop cs:[bx]	;入栈后立刻弹出存到原有数据处cs:0 cs:2等
		    add bx,2
		    loop s
		    
		    mov ax,4c00H
		    int 21H
		  
codesg ends

end start

다른 세그먼트로 6.3 데이터, 코드, 스택

앞서 우리가 같은 세그먼트에 데이터, 스택, 코드 등을 넣어 경우에, 그래서 더 64킬로바이트 이상의 데이터, 스택, 공간 코드 요구, 그것은 (8086 모델)의 세그먼트의 최대 용량을 초과하는 경우 혼란 보인다

그래서 저장 세그먼트 각각 복수의 고려

assume cs:code,ds:data,ss:tack

data sgement
	dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
data ends

stack segment
	dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends

code segment
	 start:	mov ax,stack
            mov ss,ax
            mov sp,20H	;设置栈顶ss:sp指向stack:20
            
            mov ax,data
            mov ds,ax	;ds指向data段
            
            mov bx,0	;ds:bx指向data段中的第一个单元
            
            mov cx,8
          s:push [bx]
            add bx,2
            loop s	;将data段0~15单元8个字型数据入栈
            
            mov bx,0
            
            mov cx,8
         s0:pop [bx]
            add bx,2
            loop s0	;依次出栈8个字型数据到data段中的0~15单元中
            		;达到逆序存放的目的
            
            mov ax,4c00H
            int 21H
            
codesg ends

end start

직접 값 8086CPU를 보낼 수 있지 않기 때문에 프로그램은 세그먼트 이름, 당신은 MOV DS에 데이터를 사용할 수없는 세그먼트 주소 데이터 세그먼트의 이름을 도끼로 전송되는 데이터를 의미, 레이블에 해당 세그먼트 주소, mov 인 도끼를 나타냅니다 어드레스 세그먼트를 나타내는 값의 세그먼트 레지스터, 데이터 스택 처리 컴파일러

여기 stcak, 데이터, 코드 우리의 이름, CPU 이름과 스택으로 스택 세그먼트로 이동하지 않습니다, 데이터 세그먼트 저장된 데이터도 CS 가정 : 코드, DS : 데이터, SS : 압정을, CPU는하지 않습니다 CS 포인트 코드 때문에, 데이터 점을 DS, 이러한 레이블 만은, 그것은 단지 소스 프로그램에 존재

어셈블리 소스 프로그램의 지침은 CPU에 의해 실행되는 시스템 제어 명령을 사용하는 우리의 희망 CPU 작업 필요에 따라 배열은 우리가 첫 번째 명령이 CPU의 시작 위치를 종료 그래서, 내용이 필요

mov ax,stack
mov ss,ax
mov sp,20H

세트 SS : SP 포인트 스택 : 20, 스택 공간은 스택 섹션으로 사용할 수 있도록

스택 대신, B로 변경 데이터를 요약하면, 우리는 어떻게 CPU 처리부의 내용을 정의 또는 데이터 세그먼트와 같이 변경 한 코드의 소스를 결정하기 위해 레지스터의 특정 세트의 어셈블리 명령어 조립 지시에 전적으로 의존 C, D로 가능 시작할

게시 84 개 원래 기사 · 원 찬양 7 ·은 10000 +를 볼

추천

출처blog.csdn.net/weixin_43569916/article/details/104547264