汇编程序

Tutorial: 汇编基础 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
  1. 第一个汇编程序
ASSUME CS:code

code SEGMENT
	     mov  ax, 2000H
	     mov  ss, ax
	     mov  sp,0
	     add  sp,10H
	     pop  ax
	     pop  bx
	     push ax
	     push bx
	     pop  ax
	     pop  bx

	     mov  ax,4C00H 	; 程序返回
	     int  21h      	; 调用4C00h号功能, 结束程序
code ENDS

END
# 调试模式
-d 2000:10 1F
2000:0010  11 22 33 44 55 00 00 00-00 00 00 00 00 00 00 00   .3DU...........
-r
AX=0000  BX=0000  CX=0016  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0000   NV UP EI PL NZ NA PO NC
0E24:0000 B80020        mov     AX,2000
-t

AX=2000  BX=0000  CX=0016  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0003   NV UP EI PL NZ NA PO NC
0E24:0003 8ED0          mov     SS,AX
-t

AX=2000  BX=0000  CX=0016  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=0008   NV UP EI PL NZ NA PO NC
0E24:0008 83C410        add     SP,+10
-t

AX=2000  BX=0000  CX=0016  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=000B   NV UP EI PL NZ NA PO NC
0E24:000B 58            pop     AX
-t

AX=2211  BX=0000  CX=0016  DX=0000  SP=0012  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=000C   NV UP EI PL NZ NA PO NC
0E24:000C 5B            pop     BX
-d 2000:10 1F
2000:0010  21 08 33 44 55 00 00 00-00 00 00 00 00 00 00 00   !.3DU...........
-r
AX=2211  BX=0000  CX=0016  DX=0000  SP=0012  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=000C   NV UP EI PL NZ NA PO NC
0E24:000C 5B            pop     BX
-t

AX=2211  BX=4433  CX=0016  DX=0000  SP=0014  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=000D   NV UP EI PL NZ NA PO NC
0E24:000D 50            push    AX
-d 2000:10 1F
2000:0010  24 0E 21 08 55 00 00 00-00 00 00 00 00 00 00 00   $.!.U...........

-r
AX=2211  BX=4433  CX=0016  DX=0000  SP=0014  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=000D   NV UP EI PL NZ NA PO NC
0E24:000D 50            push    AX
-t

AX=2211  BX=4433  CX=0016  DX=0000  SP=0012  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=000E   NV UP EI PL NZ NA PO NC
0E24:000E 53            push    BX
-t

AX=2211  BX=4433  CX=0016  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=000F   NV UP EI PL NZ NA PO NC
0E24:000F 58            pop     AX
-d 2000:10 1F
2000:0010  33 44 11 22 55 00 00 00-00 00 00 00 00 00 00 00   3D.U...........

-r
AX=2211  BX=4433  CX=0016  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=000F   NV UP EI PL NZ NA PO NC
0E24:000F 58            pop     AX
-t

AX=4433  BX=4433  CX=0016  DX=0000  SP=0012  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=0010   NV UP EI PL NZ NA PO NC
0E24:0010 5B            pop     BX
-t

AX=4433  BX=2211  CX=0016  DX=0000  SP=0014  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=2000  CS=0E24  IP=0011   NV UP EI PL NZ NA PO NC
0E24:0011 B8004C        mov     AX,4C00
-d 2000:10 1F
2000:0010  24 0E 21 08 55 00 00 00-00 00 00 00 00 00 00 00   $.!.U...........
  1. BX 显式
ASSUME CS:code

code SEGMENT
	     mov bx, 0
	     mov ax, ds:[bx]	; 显式
	     mov bx, 2
	     mov ax, ds:[bx]
	     mov bx, 10         ; 十进制的10
	     mov ax, ds:[bx]

	     mov ax,4C00H
	     int 21h
code ENDS

END
# 调试模式
-d ds:0 1F
0E14:0000  CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 21 08 8A 03   . ........O.!...
0E14:0010  21 08 17 03 21 08 10 08-01 04 01 02 03 FF FF FF   !...!...........
-r
AX=0000  BX=0000  CX=0014  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0000   NV UP EI PL NZ NA PO NC
0E24:0000 BB0000        mov     BX,0000
-t

AX=0000  BX=0000  CX=0014  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0003   NV UP EI PL NZ NA PO NC
0E24:0003 8B07          mov     AX,[BX]                            DS:0000=20CD
-t

AX=20CD  BX=0000  CX=0014  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0005   NV UP EI PL NZ NA PO NC
0E24:0005 BB0200        mov     BX,0002
-t

AX=20CD  BX=0002  CX=0014  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0008   NV UP EI PL NZ NA PO NC
0E24:0008 8B07          mov     AX,[BX]                            DS:0002=9FFF
-t

AX=9FFF  BX=0002  CX=0014  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=000A   NV UP EI PL NZ NA PO NC
0E24:000A BB0A00        mov     BX,000A
-t

AX=9FFF  BX=000A  CX=0014  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=000D   NV UP EI PL NZ NA PO NC
0E24:000D 8B07          mov     AX,[BX]                            DS:000A=034F
-t

AX=034F  BX=000A  CX=0014  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=000F   NV UP EI PL NZ NA PO NC
0E24:000F B8004C        mov     AX,4C00
-d ds:0 1F
0E14:0000  CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 21 08 8A 03   . ........O.!...
0E14:0010  21 08 17 03 21 08 10 08-01 04 01 02 03 FF FF FF   !...!...........
  1. CX 循环次数寄存器 与 loop 用加法计算 10 x 5 的值放到 AX 中 程序会判断 CX 是否为 0, 否则一直循环
ASSUME CS:code

code SEGMENT
	         mov  ax,0
	         mov  cx,5
	addNumer:add  ax, 10  	; 标号, 其实就是一个地址
	         loop addNumer	; loop 循环一次, CX = CX - 1, 注意不要随便改动CX的值

	         mov  ax,4C00H
	         int  21h
code ENDS

END
# 调试模式
-u
0E24:0000 B80000        mov     AX,0000
0E24:0003 B90500        mov     CX,0005
0E24:0006 83C00A        add     AX,+0A
0E24:0009 E2FB          loop    0006
0E24:000B B8004C        mov     AX,4C00
0E24:000E CD21          int     21
0E24:0010 19FF          SBB     DI,DI
0E24:0012 36            SS:
0E24:0013 7813          JS      0028
0E24:0015 FF368813      push    [1388]
0E24:0019 FF368613      push    [1386]
0E24:001D CF            IRET
0E24:001E FA            CLI
0E24:001F 1F            pop     DS
-r
AX=0000  BX=0000  CX=0010  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0000   NV UP EI PL NZ NA PO NC
0E24:0000 B80000        mov     AX,0000
-t

AX=0000  BX=0000  CX=0010  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0003   NV UP EI PL NZ NA PO NC
0E24:0003 B90500        mov     CX,0005
-t

AX=0000  BX=0000  CX=0005  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0006   NV UP EI PL NZ NA PO NC
0E24:0006 83C00A        add     AX,+0A
-t

AX=000A  BX=0000  CX=0005  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0009   NV UP EI PL NZ NA PE NC
0E24:0009 E2FB          loop    0006
-p

AX=0032  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=000B   NV UP EI PL NZ AC PO NC
0E24:000B B8004C        mov     AX,4C00
  1. 求 FFFF:0 ~ FFFF:F 字节型数据的和, 放到 dx 中
ASSUME CS:code

code SEGMENT
	         mov  ax, 0FFFFH
	         mov  ds, ax

	         mov  ax,0       	; al 存放字节型数据
	         mov  bx,0       	; 叠加
	         mov  dx,0       	; 存放结果

	         mov  cx, 16     	; 循环次数

	addNumer:mov  al, ds:[bx]
	         add  dx,ax
	         inc  bx
	         loop addNumer

	         mov  ax,4C00H
	         int  21h
code ENDS

END
# 调试模式
-d FFFF:0 F
FFFF:0000  EA 5B E0 00 F0 30 31 2F-30 31 2F 39 32 00 FC 55   .[...01/01/92..U
-r
AX=0000  BX=0000  CX=001D  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0000   NV UP EI PL NZ NA PO NC
0E24:0000 B8FFFF        mov     AX,FFFF
-t

AX=FFFF  BX=0000  CX=001D  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0003   NV UP EI PL NZ NA PO NC
0E24:0003 8ED8          mov     DS,AX
-t

AX=FFFF  BX=0000  CX=001D  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0005   NV UP EI PL NZ NA PO NC
0E24:0005 B80000        mov     AX,0000
-t

AX=0000  BX=0000  CX=001D  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0008   NV UP EI PL NZ NA PO NC
0E24:0008 BB0000        mov     BX,0000
-t

AX=0000  BX=0000  CX=001D  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=000B   NV UP EI PL NZ NA PO NC
0E24:000B BA0000        mov     DX,0000
-t

AX=0000  BX=0000  CX=001D  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=000E   NV UP EI PL NZ NA PO NC
0E24:000E B91000        mov     CX,0010
-t

AX=0000  BX=0000  CX=0010  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0011   NV UP EI PL NZ NA PO NC
0E24:0011 8A07          mov     AL,[BX]                            DS:0000=EA
-t

AX=00EA  BX=0000  CX=0010  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0013   NV UP EI PL NZ NA PO NC
0E24:0013 03D0          add     DX,AX
-t

AX=00EA  BX=0000  CX=0010  DX=00EA  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0015   NV UP EI PL NZ NA PO NC
0E24:0015 43            inc     BX
-t

AX=00EA  BX=0001  CX=0010  DX=00EA  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0016   NV UP EI PL NZ NA PO NC
0E24:0016 E2F9          loop    0011
-t

AX=00EA  BX=0001  CX=000F  DX=00EA  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0011   NV UP EI PL NZ NA PO NC
0E24:0011 8A07          mov     AL,[BX]                            DS:0001=5B
-d FFFF:0 F
FFFF:0000  EA 5B E0 00 F0 30 31 2F-30 31 2F 39 32 00 FC 55   .[...01/01/92..U
-t

AX=005B  BX=0001  CX=000F  DX=00EA  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0013   NV UP EI PL NZ NA PO NC
0E24:0013 03D0          add     DX,AX
-t

AX=005B  BX=0001  CX=000F  DX=0145  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0015   NV UP EI PL NZ AC PO NC
0E24:0015 43            inc     BX
-t

AX=005B  BX=0002  CX=000F  DX=0145  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0016   NV UP EI PL NZ NA PO NC
0E24:0016 E2F9          loop    0011
-p

AX=0055  BX=0010  CX=0000  DX=05F1  SP=0000  BP=0000  SI=0000  DI=0000
DS=FFFF  ES=0E14  SS=0E23  CS=0E24  IP=0018   NV UP EI PL NZ AC PO NC
0E24:0018 B8004C        mov     AX,4C00
  1. 将 FFFF:0 ~ FFFF:F 的数据复制到 0020H 中 DS: 数据从哪里来 ES: 数据放到哪里去
ASSUME CS:code

code SEGMENT
	         mov  ax, 0FFFFH 	; 不能以字母开头, 加 0
	         mov  ds, ax     	; 数据从哪里来

	         mov  ax,0020H
	         mov  es, ax     	; 数据放到哪里

	         mov  bx, 0      	; 累加
	         mov  cx, 16     	; 循环次数

	copyData:mov  dl, ds:[bx]	; DX 打酱油
	         mov  es:[bx], dl
	         inc  bx
	         loop copyData

	         mov  ax,4C00H
	         int  21h
code ENDS

END
  1. 定义数据空间 将 0123H,4567H,89ABH,0CDEFH 累加放到 AX 中
ASSUME CS:code

code SEGMENT
	          DW   0123H,4567H,89ABH,0CDEFH	; 定义字型数据, 放在 CS:0 开始的地址段中

	start:                                 	; 不加 start 会从DW处定义的字形数据当作指令来开始
	          mov  ax,cs
	          mov  ds,ax                   	; 数据从哪里来

	          mov  ax,0                    	; 初始化数据
	          mov  bx,0                    	; 累加
	          mov  cx,4                    	; 循环4次

	addNumber:add  ax,ds:[bx]
	          add  bx,2                    	; 字型数据
	          loop addNumber

	          mov  ax,4C00H
	          int  21h
code ENDS

END start
# 调试模式
-u
0E24:0008 8CC8          mov     AX,CS
0E24:000A 8ED8          mov     DS,AX
0E24:000C B80000        mov     AX,0000
0E24:000F BB0000        mov     BX,0000
0E24:0012 B90400        mov     CX,0004
0E24:0015 0307          add     AX,[BX]
0E24:0017 83C302        add     BX,+02
0E24:001A E2F9          loop    0015
0E24:001C B8004C        mov     AX,4C00
0E24:001F CD21          int     21
0E24:0021 06            push    ES
0E24:0022 7613          JBE     0037
0E24:0024 8F067413      pop     [1374]
-d cs:0 F
0E24:0000  23 01 67 45 AB 89 EF CD-8C C8 8E D8 B8 00 00 BB   #.gE............
-r
AX=0000  BX=0000  CX=0021  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E23  CS=0E24  IP=0008   NV UP EI PL NZ NA PO NC
0E24:0008 8CC8          mov     AX,CS
-g 0012

AX=0000  BX=0000  CX=0021  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E24  ES=0E14  SS=0E23  CS=0E24  IP=0012   NV UP EI PL NZ NA PO NC
0E24:0012 B90400        mov     CX,0004
-t

AX=0000  BX=0000  CX=0004  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E24  ES=0E14  SS=0E23  CS=0E24  IP=0015   NV UP EI PL NZ NA PO NC
0E24:0015 0307          add     AX,[BX]                            DS:0000=0123
-t

AX=0123  BX=0000  CX=0004  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E24  ES=0E14  SS=0E23  CS=0E24  IP=0017   NV UP EI PL NZ NA PO NC
0E24:0017 83C302        add     BX,+02
-t

AX=0123  BX=0002  CX=0004  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E24  ES=0E14  SS=0E23  CS=0E24  IP=001A   NV UP EI PL NZ NA PO NC
0E24:001A E2F9          loop    0015
-t

AX=0123  BX=0002  CX=0003  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E24  ES=0E14  SS=0E23  CS=0E24  IP=0015   NV UP EI PL NZ NA PO NC
0E24:0015 0307          add     AX,[BX]                            DS:0002=4567
-t

AX=468A  BX=0002  CX=0003  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E24  ES=0E14  SS=0E23  CS=0E24  IP=0017   NV UP EI PL NZ NA PO NC
0E24:0017 83C302        add     BX,+02
-t

AX=468A  BX=0004  CX=0003  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E24  ES=0E14  SS=0E23  CS=0E24  IP=001A   NV UP EI PL NZ NA PO NC
0E24:001A E2F9          loop    0015
-p

AX=9E24  BX=0008  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0E24  ES=0E14  SS=0E23  CS=0E24  IP=001C   NV UP EI PL NZ NA PO NC
0E24:001C B8004C        mov     AX,4C00
Prev: Next: 栈空间