微机原理与接口技术 第四章 汇编伪指令及程序设计(河北专升本计算机)

本文介绍了汇编语言中的伪指令系统,包括数据定义(DB、DW、DD)、符号定义(EQU、ORG、OFFSET)和段定义等。通过实例展示了顺序结构、分支结构和循环结构的程序设计,以及宏的使用。此外,还概述了汇编程序的上机步骤,涉及汇编、连接和调试过程。
摘要由CSDN通过智能技术生成

一、伪指令系统

1. 伪指令

指示引导指令运行的语句

2. 汇编语言语句(4部分)

通常汇编语言一条指令包括操作码操作数两部分。

[ 名 字 符 ] { 伪 指 令 ( 变 量 / 标 号 ) 指 令 ( 标 号 ) [名字符]\begin{cases} 伪指令(变量/标号)\\ 指令(标号) \end{cases} []{/

变量和标号的三个属性:

  • 变量(属性)属性、偏移量属性和类型属性(对应数据(数据项的存储单位))
  • 标号(属性)属性、偏移量属性和类型属性(对应指令(距离属性,指标号和转移指令的距离))

助 记 符 { 伪 指 令 语 句 ( D B / D W ) 指 令 语 句 ( 操 作 码 ( M O V 、 A D D . . . ) ) 助记符\begin{cases} 伪指令语句(DB/DW)\\ 指令语句(操作码(MOV、ADD...)) \end{cases} {DB/DWMOVADD...
[ 操 作 数 项 ] ( 三 种 情 况 ) { 2 个 操 作 数 : 双 地 址 指 令 1 个 操 作 数 : 单 地 址 指 令 0 个 操 作 数 : 零 地 址 指 令 [操作数项](三种情况)\begin{cases} 2个操作数:双地址指令\\ 1个操作数:单地址指令\\ 0个操作数:零地址指令 \end{cases} []210

3. 五种伪指令

(1)数据定义伪指令

{ D B   定 义 字 节 ( 8 位 ) D W   定 义 字 ( 16 位 ) D D   定 义 双 字 ( 32 位 ) \begin{cases} DB\ 定义字节(8位)\\ DW\ 定义字(16位)\\ DD\ 定义双字(32位) \end{cases} DB 8DW 16DD 32

DB
例: b u f   D B   1 , 2 , 3 buf\ DB\ 1,2,3 buf DB 1,2,3
b u f 1   D B   ′ A ′ , ′ B ′ buf1\ DB\ 'A','B' buf1 DB A,B
b u f 2   D B   ′ 5 ′ , ? buf2\ DB\ '5',? buf2 DB 5,?
b u f 3   D B   ′ C D ′ , ′ 5 6 ′ , 8 buf3\ DB\ 'CD','56',8 buf3 DB CD,56,8
b u f 4   D B   100 ( ? ) buf4\ DB\ 100(?) buf4 DB 100(?)
b u f 5   D B   3   D U P ( 15 , 16 , ? ) buf5\ DB\ 3\ DUP(15,16,?) buf5 DB 3 DUP(15,16,?)
b u f 6   D B   D U P ( 1 , 3 D U P ( 2 ) ) buf6\ DB\ DUP(1,3DUP(2)) buf6 DB DUP(1,3DUP(2))

01H ← b u f \leftarrow buf buf
02H
03H
41H ← b u f 1 \leftarrow buf1 buf1
42H
35H ← b u f 2 \leftarrow buf2 buf2
43H ← b u f 3 \leftarrow buf3 buf3
44H
35H
36H
08H
← b u f 4 \leftarrow buf4 buf4
.
100个
.
.
0FH ← b u f 5 \leftarrow buf5 buf5
10H
0FH
10H
0FH
10H
1 ← b u f 6 \leftarrow buf6 buf6
2
2
2
1
2
2
2

DW
例: a r 1   D W   1234 H , 5678 H ar1\ DW\ 1234H,5678H ar1 DW 1234H,5678H
a r 2   D W   ′ A B ′ , ′ C D ′ ar2\ DW\ 'AB','CD' ar2 DW AB,CD
a r 3   D W   2 D U P ( ? ) ar3\ DW\ 2DUP(?) ar3 DW 2DUP(?)
a r 4   D W   ′ A ′ , ′ B ′ ar4\ DW\ 'A','B' ar4 DW A,B

34H ← a r 1 \leftarrow ar1 ar1
12H
78H
56H
42H ← a r 2 \leftarrow ar2 ar2
41H
44H
43H
← a r 3 \leftarrow ar3 ar3
41H ← a r 4 \leftarrow ar4 ar4
00H
42H
00H

DD
例: A 1   D D   5 , 6 A1\ DD\ 5,6 A1 DD 5,6

05H ← A 1 \leftarrow A1 A1
00H
00H
00H
06H
00H
00H
00H
(2)符号定义伪指令

① 符 号 名 E Q U 表 达 式 ① 符号名 EQU 表达式 EQU
x   E Q U   5 ; x = 5 x\ EQU\ 5\qquad\color{DeepSkyblue}{;x=5} x EQU 5;x=5
M O V   A L , x ; A L = 5 MOV\ AL,x\qquad\color{DeepSkyblue}{;AL=5} MOV AL,x;AL=5
E Q U 不 占 用 内 存 空 间 EQU不占用内存空间 EQU
O R G 指 明 下 一 变 量 的 偏 移 地 址 ORG 指明下一变量的偏移地址 ORG
O F F S E T 取 得 标 号 的 偏 移 地 址 ( [ B X , B P , S I , D I ] ) OFFSET取得标号的偏移地址([BX,BP,SI,DI]) OFFSET[BX,BP,SI,DI]

(3)段定义伪指令

① { 段 名   S e g m e n t . . . 段 名   e n d s ①\begin{cases} 段名\ Segment\\ .\\ .\\ .\\ 段名\ ends \end{cases}  Segment... ends
② a s s u m e   D S : 段 名 , C S : 段 名 , S S : 段 名 , E S : 段 名 ② assume\ DS:段名,CS:段名,SS:段名,ES:段名 assume DS:,CS:,SS:,ES:
③ 汇 编 语 言 源 程 序 的 基 本 格 式 : ③ 汇编语言源程序的基本格式:
变 量 位 置 ( 数 据 ) { { d a t a   s e g m e n t . . . d a t a   e n d s { s t a c k   s e g m e n t . . . s t a c k   e n d s { e x t r a   s e g m e n t . . . e x t r a   e n d s 变量位置(数据)\begin{cases} \begin{cases} data\ segment\\ .\\ .\\ .\\ data\ ends \end{cases}\\ \begin{cases} stack\ segment .\\ .\\ .\\ stack\ ends \end{cases}\\ \begin{cases} extra\ segment .\\ .\\ .\\ extra\ ends \end{cases} \end{cases} data segment...data endsstack segment...stack endsextra segment...extra ends

定义一个大小为32个字的堆栈。
S S E G   s e g m e n t   s t a c k SSEG\ segment\ stack SSEG segment stack
D W   32   D U P ( ? ) \qquad DW\ 32\ DUP(?) DW 32 DUP(?)
S S E G   e n d s SSEG\ ends SSEG ends

指 令 位 置 { c o d e   s e g m e n t a s s u m e   D S : d a t a , S S : s t a c k , E S : e x t r a , C S : c o d e s t a r t : M O V   A X , d a t a M O V   D S , A X M O V   A X , s t a c k M O V   S S , A X M O V   A X , e x t r a M O V   E S , A X . . . M O V   A H , 4 C H I N T   21 H ; 返 回 操 作 系 统 c o d e   e n d s e n d   s t a r t ; 整 个 程 序 汇 编 结 束 指令位置\begin{cases} code\ segment\\ \qquad\quad assume\ DS:data,SS:stack,ES:extra,CS:code\\ start:MOV\ AX,data\\ \qquad\quad MOV\ DS,AX\\ \qquad\quad MOV\ AX,stack\\ \qquad\quad MOV\ SS,AX\\ \qquad\quad MOV\ AX,extra\\ \qquad\quad MOV\ ES,AX\\ \qquad\quad .\\ \qquad\quad .\\ \qquad\quad .\\ \qquad\quad MOV\ AH,4CH\\ \qquad\quad INT\ 21H\qquad\color{DeepSkyblue}{;返回操作系统}\\ code\ ends\\ end\ start\qquad\color{DeepSkyblue}{;整个程序汇编结束} \end{cases} code segmentassume DS:data,SS:stack,ES:extra,CS:codestart:MOV AX,dataMOV DS,AXMOV AX,stackMOV SS,AXMOV AX,extraMOV ES,AX...MOV AH,4CHINT 21H;code endsend start;
④ 段 属 性 : [ 定 位 类 型 ] [ 组 合 类 型 ] [ 类 别 ] ④ 段属性:[定位类型] [组合类型] [类别] [][][]
⑤ 一 个 程 序 中 , 至 少 有 一 个 代 码 段 ⑤ 一个程序中,至少有一个代码段

定位类型
段起始边界要求
提供给连接程序,安排段在存储器中的链接方式
4种:PARA、BYTE、WORD、PAGE

定位类型物理地址(20位,二进制)作用
PARA(节边界)XXXX XXXX XXXX XXXX 0000B默认值。段从一个节的边界开始,起始地址可被16整除。段之间最大间隙为15字节。
WORD(字边界)XXXX XXXX XXXX XXXX XXX0B段从偶地址开始,段之间最大间隙为1字节
BYTE(字节边界)XXXX XXXX XXXX XXXX XXXXB段从任一个物理地址开始。段之间无空隙
PAGE(页边界)XXXX XXXX XXXX 0000 0000B段基址从—个页的边界开始,页大小为:256字节。段基址可被256整除。段之间最大空隙为256个字节
(4)过程定义伪指令

{ 过 程 名   p r o c   [ N e a r / F a r ] . . . R E T 过 程 名   e n d p \begin{cases} 过程名\ proc\ [Near/Far] .\\ .\\ .\\ RET\\ 过程名\ endp \end{cases}  proc [Near/Far]...RET endp
汇编程序中,子程序定义中的最后一条可执行语句是RET指令。

(5) 结束伪指令

e n d   [ 标 号 ] end\ [标号] end []

二、汇编程序设计

程序结构

1. 顺序结构

例:屏幕显示字符串’hello world’
d a t a   s e g m e n t data\ segment data segment
  s t r i n g   D B   ′ h e l l o   w o r l d \qquad\ string\ DB\ 'hello\ world  string DB hello world$’
d a t a   e n d s data\ ends data ends
c o d e   s e g m e n t code\ segment code segment
  a s s u m e   D S : d a t a , C S : c o d e \qquad\ assume\ DS:data,CS:code  assume DS:data,CS:code
s t a r t : start: start:
  M O V   A X , d a t a   M O V   D S , A X } ; 用 到 了 数 据 段 , 则 需 要 把 d a t a ( 数 据 ) 转 到 D S 数 据 段 寄 存 器 , 让 数 据 段 指 向 正 确 的 位 置 。 d a t a 不 是 指 令 , 而 是 伪 指 令 , 实 际 上 是 一 个 动 态 的 内 存 地 址 , 要 想 运 行 , 必 须 先 放 入 到 D S 中 , 但 是 内 存 数 不 能 放 入 段 地 址 。 M O V A X , D A T A 起 到 过 渡 作 用 \color{DeepSkyblue}{\left. \begin{matrix} \qquad\ \color{black} {MOV\ AX,data}\\ \qquad\ \color{black} {MOV\ DS,AX} \end{matrix} \right\};用到了数据段,则需要把data(数据) 转到 DS 数据段寄存器,让数据段指向正确的位置。data不是指令,而是伪指令,实际上是一个动态的内存地址,要想运行,必须先放入到DS中,但是内存数不能放入段地址。MOV AX,DATA起到过渡作用}  MOV AX,data MOV DS,AX};dataDSdataDSMOVAX,DATA
  L E A   D X , s t r i n g   M O V   A H , 09 H I N T   21 H } ; 在 数 据 段 中 定 义 被 显 示 的 字 符 串 \color{DeepSkyblue}{\left. \begin{matrix} \qquad\ \color{black} LEA\ DX,string\\ \qquad\ \color{black} MOV\ AH,09H\\ \color{black} INT\ 21H\\ \end{matrix} \right\}\qquad\color{DeepSkyblue}{;在数据段中定义被显示的字符串}}  LEA DX,string MOV AH,09HINT 21H;
  M O V   A H , 4 C H \qquad\ MOV\ AH,4CH  MOV AH,4CH
  I N T   21 H ; 返 回 D O S \qquad\ INT\ 21H\qquad\color{DeepSkyblue}{;返回DOS}  INT 21H;DOS
c o d e   e n d s code\ ends code ends
e n d   s t a r t end\ start end start

例:从键盘接收的小写转换为大写字母,并在屏幕显示
c o d e   s e g m e n t code\ segment code segment
  a s s m e   C S : c o d e \qquad\ assme\ CS:code  assme CS:code
s t a r t : start: start:
  M O V   A H , 01 H I N T   21 H } ; 从 键 盘 接 收 单 个 字 符 , 该 字 符 的 A S C I I 存 入 A L \color{DeepSkyblue}{\left. \begin{matrix} \qquad\ \color{black}MOV\ AH,01H\\ \color{black} INT\ 21H \end{matrix} \right\}\qquad{;从键盘接收单个字符,该字符的ASCII存入AL}}  MOV AH,01HINT 21H};ASCIIAL
  S U B   A L , 20 H ; 小 写 字 母 的 A S C I I 码 ( 16 进 制 ) − 20 H 就 是 大 写 字 母 \qquad\ SUB\ AL,20H\qquad\color{DeepSkyblue}{;小写字母的ASCII码(16进制)-20H就是大写字母}  SUB AL,20H;ASCII1620H
M O V   D L , A L   M O V   A H , 02 H I N T   21 H } ; 在 屏 幕 上 显 示 单 个 字 符 , 该 字 符 的 A S C I I 码 提 前 存 入 D L 中 \color{DeepSkyblue}{\left. \begin{matrix} \qquad \color{black}{MOV\ DL,AL}\\ \qquad\ \color{black}{MOV\ AH,02H}\\ \color{black}{INT\ 21H} \end{matrix} \right\}\qquad{;在屏幕上显示单个字符,该字符的ASCII码提前存入DL中}} MOV DL,AL MOV AH,02HINT 21H;ASCIIDL
  M O V   A H , 4 C H I N T   21 H } ; 返 回 D O S 系 统 , 程 序 结 束 \color{DeepSkyblue}{\left. \begin{matrix} \qquad\ \color{black}MOV\ AH,4CH\\ \color{black}INT\ 21H \end{matrix} \right\}\qquad{;返回DOS系统,程序结束}}  MOV AH,4CHINT 21H};DOS,
c o d e   e n d s code\ ends code ends
e n d   s t a r t end\ start end start

2. 分支结构

例:键盘接收小写字母转换成大写字母,若输入的不是小写字母,则结束
c o d e   s e g m e n t code\ segment code segment
  a s s u m e   C S : c o d e \qquad\ assume\ CS:code  assume CS:code
s t a r t : start: start:
  M O V   A H , 01 H I N T   21 H } ; 从 键 盘 接 收 单 个 字 符 , 该 字 符 的 A S C I I 存 入 A L \color{DeepSkyblue}{\left. \begin{matrix} \qquad\ \color{black}MOV\ AH,01H\\ \color{black} INT\ 21H \end{matrix} \right\}\qquad{;从键盘接收单个字符,该字符的ASCII存入AL}}  MOV AH,01HINT 21H};ASCIIAL
  C M P   A L , ′ a ′ J B   L 1   C M P   A L , ′ z ′ J A   L 1 } ; A S C I I 小 于 a 大 于 z 的 直 接 跳 转 L 1 \color{DeepSkyblue}{\left. \begin{matrix} \qquad\ \color{black}{CMP\ AL,'a'}\\ \color{black}{JB\ L1}\\ \qquad\ \color{black}{CMP\ AL,'z'}\\ \color{black}{JA\ L1}\\ \end{matrix} \right\}\qquad{;ASCII小于a大于z的直接跳转L1}}  CMP AL,aJB L1 CMP AL,zJA L1;ASCIIazL1
  S U B   A L , 20 H \qquad\ SUB\ AL,20H  SUB AL,20H
M O V   D L , A L   M O V   A H , 02 H I N T   21 H } ; 在 屏 幕 上 显 示 单 个 字 符 , 该 字 符 的 A S C I I 码 提 前 存 入 D L 中 \color{DeepSkyblue}{\left. \begin{matrix} \qquad \color{black}{MOV\ DL,AL}\\ \qquad\ \color{black}{MOV\ AH,02H}\\ \color{black}{INT\ 21H} \end{matrix} \right\}\qquad{;在屏幕上显示单个字符,该字符的ASCII码提前存入DL中}} MOV DL,AL MOV AH,02HINT 21H;ASCIIDL
L 1 : M O V   A H , 4 C H I N T   21 H } ; 返 回 D O S 系 统 , 程 序 结 束 \color{DeepSkyblue}{\left. \begin{matrix} \color{black}L1:MOV\ AH,4CH\\ \color{black}INT\ 21H \end{matrix} \right\}\qquad{;返回DOS系统,程序结束}} L1:MOV AH,4CHINT 21H};DOS,
c o d e   e n d s code\ ends code ends
e n d   s t a r t end\ start end start

上面L1则是标号

  1. 汇编语言中的标号是:符号地址
  2. 标号由1~8字符组成,头—个字符必须是字母。(标号长度不能超过31个字符)
  3. 不能使用汇编语言已定义的符号。
  4. 标号后必须跟冒号;
  5. 同一标号在一个程序中只能定义一次。
  6. ?和$不能单独作为记号

例:内存数据段buf为首地址的10个有符号字节数,求最小数,并存入MIN单元
d a t a   s e g m e n t data\ segment data segment
  b u f   D B   − 1 , 2 , 3 , 4 , − 5 , 6 , − 7 , 8 , 9 , 10 \qquad\ buf\ DB\ -1,2,3,4,-5,6,-7,8,9,10  buf DB 1,2,3,4,5,6,7,8,9,10
  M I N   D B   ? \qquad\ MIN\ DB\ ?  MIN DB ?
d a t a   e n d s data\ ends data ends
c o d e   s e g m e n t code\ segment code segment
  a s s u m e   D S : d a t a , C S : c o d e \qquad\ assume\ DS:data,CS:code  assume DS:data,CS:code
s t a r t : start: start:
  M O V   A X , d a t a   M O V   D S , A X } ; 用 到 了 数 据 段 , 则 需 要 把 d a t a ( 数 据 ) 转 到 D S 数 据 段 寄 存 器 , 让 数 据 段 指 向 正 确 的 位 置 。 d a t a 不 是 指 令 , 而 是 伪 指 令 , 实 际 上 是 一 个 动 态 的 内 存 地 址 , 要 想 运 行 , 必 须 先 放 入 到 D S 中 , 但 是 内 存 数 不 能 放 入 段 地 址 。 M O V A X , D A T A 起 到 过 渡 作 用 \color{DeepSkyblue}{\left. \begin{matrix} \qquad\ \color{black} {MOV\ AX,data}\\ \qquad\ \color{black} {MOV\ DS,AX} \end{matrix} \right\};用到了数据段,则需要把data(数据) 转到 DS 数据段寄存器,让数据段指向正确的位置。data不是指令,而是伪指令,实际上是一个动态的内存地址,要想运行,必须先放入到DS中,但是内存数不能放入段地址。MOV AX,DATA起到过渡作用}  MOV AX,data MOV DS,AX};dataDSdataDSMOVAX,DATA
B X , b u f \qquad\\ BX,buf BX,buf
  M O V   C X , 9 \qquad\ MOV\ CX,9  MOV CX,9
  M O V   A L , [ B X ] \qquad\ MOV\ AL,[BX]  MOV AL,[BX]
L 2 : I N C   B X L2:INC\ BX L2:INC BX
  C M P   A L , [ B X ] \qquad\ CMP\ AL,[BX]  CMP AL,[BX]
  J L E   L 1 \qquad\ JLE\ L1  JLE L1
  M O V   A L , [ B X ] \qquad\ MOV\ AL,[BX]  MOV AL,[BX]
L 1 : L O O P   L 2 { D E C   C X ; C X − 1 ➡ C X = 98 J N Z   L 1 ; C X ≠ 0 时 跳 转 L 2 L1:LOOP\ L2 \color{DeepSkyblue}{\begin{cases} DEC\ CX\quad ;CX-1➡CX=98\\ JNZ\ L1\quad ;CX\not=0时跳转L2 \end{cases}} L1:LOOP L2{DEC CX;CX1CX=98JNZ L1;CX=0L2
  M O V   M I N , A L \qquad\ MOV\ MIN,AL  MOV MIN,AL
M O V   A H , 4 C H I N T   21 H } ; 返 回 D O S 系 统 , 程 序 结 束 \color{DeepSkyblue}{\left. \begin{matrix} \color{black}\qquad MOV\ AH,4CH\\ \color{black}INT\ 21H \end{matrix} \right\}\qquad{;返回DOS系统,程序结束}} MOV AH,4CHINT 21H};DOS
c o d e   e n d s code\ ends code ends
e n d   s t a r t end\ start end start

N
Y
N
Y
start
① lea BX,buf ② MOV CX,9 ③ MOV AL,[BX]
BX+1➡BX
AL≤[BX]
AL⬅[BX]
CX-1➡CX
CX=0
MIN⬅AL
end

例:
Y { 1 , x > 0 0 , x = 0 − 1 , x < 0 Y \begin{cases} 1 &,x>0\\ 0 &,x=0\\ -1&,x<0 \end{cases} Y101,x>0,x=0,x<0
d a t a   s e g m e n t data\ segment data segment
X   D B   5 \qquad\qquad X\ DB\ 5 X DB 5
Y   D B   ? \qquad\qquad Y\ DB\ ? Y DB ?
d a t a   e n d s data\ ends data ends
c o d e   s e g m e n t code\ segment code segment
a s s u m e   D S : d a t a , C S : c o d e \qquad\qquad assume\ DS:data,CS:code assume DS:data,CS:code
s t a r t : start: start:
M O V   A X , d a t a \qquad\qquad MOV\ AX,data MOV AX,data
M O V   D S , A X \qquad\qquad MOV\ DS,AX MOV DS,AX
M O V   A L , X \qquad\qquad MOV\ AL,X MOV AL,X
C M P   A L , 0 \qquad\qquad CMP\ AL,0 CMP AL,0
J G   L 1 \qquad\qquad JG\ L1 JG L1
C M P   A L , 0 \qquad\qquad CMP\ AL,0 CMP AL,0
J Z   L 2 \qquad\qquad JZ\ L2 JZ L2
L 1 : M O V   A L , 1 \qquad L1:MOV\ AL,1 L1:MOV AL,1
J M P   E X I T \qquad \qquad JMP\ EXIT JMP EXIT
L 2 : M O V   A L . 0 \qquad L2:MOV\ AL.0 L2:MOV AL.0
E X I T : M O V   A H , 4 C H I N T   21 H } ; 返 回 D O S 系 统 , 程 序 结 束 \color{DeepSkyblue}{\left. \begin{matrix} \color{black}EXIT:MOV\ AH,4CH\\ \color{black}INT\ 21H \end{matrix} \right\}\qquad{;返回DOS系统,程序结束}} EXIT:MOV AH,4CHINT 21H};DOS
c o d e   e n d s code\ ends code ends
e n d   s t a r t end\ start end start

Y
N
Y
N
start
X>0
Y=1
X=0
Y=0
Y=-1
end
3. 循环结构

(循环程序设计中,要考虑的核心问题是循环的次数)

例:编程实现2+4+6+…+100累加和,并把和存入S单元。
d a t a   s e g m e n t data\ segment data segment
S   D W   ? \qquad S\ DW\ ? S DW ?
d a t a   e n d s data\ ends data ends
c o d e   s e g m e n t code\ segment code segment
a s s u m e   D S : d a t a , C S : c o d e \qquad assume\ DS:data,CS:code assume DS:data,CS:code
s t a r t : start: start:
; 初 始 化 \qquad\color{DeepSkyblue}{;初始化} ;
M O V   A X , d a t a \qquad MOV\ AX,data MOV AX,data
M O V   D S , A X \qquad MOV\ DS,AX MOV DS,AX
M O V   C X , 50 \qquad MOV\ CX,50 MOV CX,50
X O R   A X , A X ; 自 身 和 自 身 异 或 ➡ 清 零 \qquad XOR\ AX,AX\qquad\color{DeepSkyblue}{;自身和自身异或}➡清零 XOR AX,AX;
M O V   B X , 2 \qquad MOV\ BX,2 MOV BX,2
; 循 环 体 \qquad\color{DeepSkyblue}{;循环体} ;
L 1 : A D D   A X , B X ; A X = 0 + 2... L1:ADD\ AX,BX\qquad\color{DeepSkyblue}{;AX=0+2...} L1:ADD AX,BX;AX=0+2...
I N C   B X \qquad INC\ BX INC BX
I N C   B X ; B X = 4... \qquad INC\ BX\qquad\color{DeepSkyblue}{;BX=4...} INC BX;BX=4...
L O O P   L 1 ; C X 不 等 于 零 则 循 环 ( 跳 转 ) \qquad LOOP\ L1\qquad\color{DeepSkyblue}{;CX不等于零则循环(跳转)} LOOP L1;CX
M O V   S , A X \qquad MOV\ S,AX MOV S,AX
M O V   A H , 4 C H I N T   21 H } ; 返 回 D O S 系 统 , 程 序 结 束 \color{DeepSkyblue}{\left. \begin{matrix} \color{black}\qquad MOV\ AH,4CH\\ \color{black}INT\ 21H \end{matrix} \right\}\qquad{;返回DOS系统,程序结束}} MOV AH,4CHINT 21H};DOS
c o d e   e n d s code\ ends code ends
e n d   s t a r t end\ start end start

三、汇编上机步骤

  1. 汇 编 源 文 件 扩 展 名 : . a s m 汇编源文件扩展名:.asm .asm
  2. . a s m   M A S M . e x e 汇 编 语 言 >   . o b j .asm\ \frac{MASM.exe\quad }{汇编语言}>\ .obj .asm MASM.exe> .obj
  3. . o b j   L I N K . e x e 连 接 程 序 >   . e x e .obj\ \frac{LINK.exe\quad }{连接程序}>\ .exe .obj LINK.exe> .exe
  4. 运 行 : . e x e 运行:.exe .exe
  5. 调 试 : D e b u g . e x e { − R ; 显 示 寄 存 器 − U ; 反 汇 编 − D ; 显 示 内 存 区 − Q ; 退 出 调 试 调试:Debug.exe\begin{cases} -R\qquad\color{DeepSkyblue}{;显示寄存器}\\ -U\qquad\color{DeepSkyblue}{;反汇编}\\ -D\qquad\color{DeepSkyblue}{;显示内存区}\\ -Q\qquad\color{DeepSkyblue}{;退出调试}\\ \end{cases} Debug.exeR;U;D;Q;退

四、宏

Macro
.
.
.endm

本文仅供本人学习总结使用,文中观点,均为本人拙见,如有错误或不妥之处,请及时指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值