55.两个简单的汇编程序注释

 输出hello world,Visual Studio可以运行的

.386                            ; Tells MASM to use Intel 80386 instruction set.

.model flat,stdcall             ; Flat memory model

option casemap:none             ; Treat labels as case-sensitive

include    C:\masm32\include\windows.inc
include    C:\masm32\include\kernel32.inc
includelib    C:\masm32\lib\kernel32.lib

include    C:\masm32\include\user32.inc
includelib    C:\masm32\lib\user32.lib

.data                           ; Begin initialized data segment

       MsgBoxCaption db "Win32 Assembly Programming",0
       MsgBoxText db "Hello World!!!Welcome to ASM Programming under CLR",0

.code                            ; Beginning of code

start:                          ; Entry point of the code
        invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
        invoke ExitProcess, NULL
        end start

西电的奔腾微机原理P304的代码:

.DOSSEG;段次序按DOS段次序约定排序
.MODEL SMALL;内存模块采用小模式,占内存小,效率高
.486;采用486伪指令
.STACK 300H;建立3*16*16=768个字节的堆栈段
.DATA;以下存放near的有赋初值的数据,组名是DGROUP
BACK DB 2000 DUP(' ');申请2000个字节,存放的都是空格,注意''中间有空格
.CODE;以下存放代码
START:;标识程序入口
MYPROC PROC FAR;主过程模式是FAR,表示在段间
		MOV DS,AX;DGROUP地址赋给DS和ES
		MOV ES,AX;DS是数据段寄存器,ES是附加段寄存器

		MOV CX,08H;设置计数寄存器为8,等下loop的时候就可以循环8次
		MOV BL,00H;10H中断写串的时候设置背景,背景是黑色
		;https://en.wikipedia.org/wiki/BIOS_color_attributes
AGAIN:	LEA BP,BACK;load effective address(LEA),把BACK的地址赋给基址指针寄存器
		MOV DX,0000;数据寄存器清零,注意MOV时候的位数
		MOV AH,19  ;Write string 
		;调用10H中断来显示字符串时,各寄存器的作用如下:
		;AL = Write mode, BH = Page Number, BL = Color,CX = Number of characters in string,
		;DH = Row, DL = Column, ES:BP = Offset of string	
		MOV AL,1   ;设置写串属性String contains alternating characters and attributes
		PUSH CX;将循环次数暂时压入堆栈中
		MOV CX,07D0H;07D0H是十进制的2000,在10H中断下表示写2000个字符
		INT 10H;interrupt(INT)调用中断,10H是中断号,一般和video services有关
		;https://en.wikipedia.org/wiki/INT_10H
		CALL DELAY;调用DELAY这个过程,CALL有Near和Far之分。调完就回到原来的地方继续执行
		;也可以在子过程中通过ret来跑回原来的地方。注意和JMP的区别
		ADD BL,10H;背景色变更
		POP CX;把存在栈中的计数器的值再要回来
		LOOP AGAIN;CX若不等于0,则继续循环回到AGAIN标识处执行指令
		MOV	AX,4C00H
		INT 21H;调用21H中断,AH是4C
MYPROC ENDP;结束主过程MYPROC
DELAY	PROC NEAR;DEALY子过程是near型
		PUSH DX
		PUSH CX
		MOV DX,10
	P1:MOV CX,0FF00H
	P2:DEC CX
	   JNZ P1
	   POP CX
	   POP DX
	   RET;用RET返回到call;
DELAY ENDP
	  END	START
发布了51 篇原创文章 · 获赞 1 · 访问量 623

猜你喜欢

转载自blog.csdn.net/weixin_44737922/article/details/105459005