汇编——Masm使用及程序结构(汇编语言是一种什么语言)


本文主要分享【汇编语言是一种什么语言】,技术文章【汇编——Masm使用及程序结构】为【顺其自然~】投稿,如果你遇到相关问题,本文相关知识或能到你。

汇编语言是一种什么语言

Masm使用及程序结构

1、使用编辑器建立源程序文件test1.asm:
edit test1.asm

内容如下:

Data segment
	X1 db 1ah
	Y1 db 2bh
	X2 dw 1234h
	Y2 dw 0abcdh
Data ends
Stack segment para stack
	Db 10 dup(0)
Stack ends
Code segment
	Assume cs:code,ds:data,ss:stack
Start: 	mov ax,data
 		Mov ds,ax
		Mov ax,x2
		Mov bx,y2
		Push ax            将ax压入堆栈,栈顶指针SP自动减2
		Mov dh,y1
        Mov ah,4ch
        Int  21h
Code ends
End start

译这个源程序文件:masm test1.asm

有错则返回编辑修改,编译通过后连接:Link test1.obj

成功后用debug调入内存:debug test1.exe

画出内存中这3个段,标出段起始地址及段内存储的内容
标出几个变量对应的偏移量(IP为指令指针寄存器,用来存放代码段中的偏移地址。在程序运行过程中,它始终指向下一条指令的首地址.)
标出栈底的位置
单步运行程序,观察ds的变化;观察相关寄存器;观察SP

Push ax 将ax压入堆栈,栈顶指针SP自动减2

结果可由图示:

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

数据区可由图示:

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

DS、SS是独立的段,DS存放数据,SS是栈数据结构。

此例中,若有如下操作:

mov ax,x1
mov bl,x2    将会怎样?说明什么?

只有AX和BX寄存器里的内容发生变化,其他各寄存器不变。说明该操作只对数据段产生影响,不影响代码段和堆栈段。

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

2、编程完成字运算:W=X+Y-Z

源程序:

Data segment
    X  dw  2
    Y  dw  3
    Z  dw  1
    W  dw  ?
Data ends
Stack segment  para stack
    Dw 10 dup(0)
Stack ends
Code  segment
Assume cs:code,ds:data,ss:stack
Start:  mov ax,data
        mov ds,ax
        mov ax,x
        add ax,y
        sub ax,z
        mov w,ax
        mov ah,4ch
        int  21h
Code  ends
End  start

序编译通过。

可从数据段的起始地址d076A:0000查看内存,图示结果可见正确。

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

3、建立源程序test2.asm

Data segment
	X1 db 1
	X2 db 2
	X3 db 3,4,5,6
	X4 dw 0ah
	X5 dw 0bh,0ch,12abh
Data ends
Stack segment para stack
	Db 10 dup(0)
Stack ends
Code segment
	Assume cs:code,ds:data,ss:stack
Start: 	mov ax,data
 		Mov ds,ax
		Mov al,x3
		Mov bx,x5
Code ends
End start

译连接后用debug调入内存

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

画出数据段在内存中的存放情况,各个变量的位置(偏移量)

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

数据段段基址为076a

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

4、建立test3.asm

Data segment
	X1 db ‘ABCDE’
	X2 db 41h,42h,43h,44h,45h
Data ends
Stack segment para stack
	Db 10 dup(0)
Stack ends
Code segment
	Assume cs:code,ds:data,ss:stack
Start: 	mov ax,data
 		Mov ds,ax
		Mov al,x1
		Mov bl,x2
Code ends
End start

译连接后用debug调入内存

画出数据段在内存中的存放情况,各个变量的位置(偏移量)

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

数据段段基址为076a

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

所以A,B,C,D,E对应的ASCII码分别是41,42,43,44,45

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

5、建立test4.asm

Data segment
	X1 db   6  dup(2)
	X2 dw   4  dup(1)
Data ends
Stack segment para stack
	Db 10 dup(0)
Stack ends
Code segment
	Assume cs:code,ds:data,ss:stack
Start: 	mov ax,data
 		Mov ds,ax
		Mov al,x1
		Mov bl,x2
Code ends
End start

译连接后用debug调入内存

运行的截图我就不放了…

画出数据段在内存中的存放情况,各个变量的位置(偏移量)

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

数据段段基址为076a

汇编——Masm使用及程序结构(汇编语言是一种什么语言)


6、建立test5.asm

Data segment
	Org 0004h
NUM  DB  75H
	ARRAY  DW  20H  DUP(0)
	ADR1  DW  NUM
	ADR2  DD  NUM
	ADR3  DW  ARRAY[2]
Data ends
Stack segment para stack
	Db 10 dup(0)
Stack ends
Code segment
	Assume cs:code,ds:data,ss:stack
Start: 	mov ax,data
 		Mov ds,ax
		Mov ax,adr1
		Mov bx,adr3
Code ends
End start

译连接后用debug调入内存

画出数据段在内存中的存放情况,各个变量的位置(偏移量)、内容

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

数据段段基址为076a,Org 0004h表示NUM的偏移量为0004h

汇编——Masm使用及程序结构(汇编语言是一种什么语言)

NUM的偏移量为0004,内容为75H;
ARRAY偏移量为0005,内容为20H个字,占64个字节;
ADR1(字)的内容为NUM的偏移量,为0004;
ADR2(双字)的内容为NUM的偏移量,为076A0004;
ADR3(字)的内容为ARRAY的偏移量加2,为0007。

本文《汇编——Masm使用及程序结构》版权归顺其自然~所有,引用汇编——Masm使用及程序结构需遵循CC 4.0 BY-SA版权协议。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: