80x86汇编指令详解(下)

80x86汇编指令详解(下)  (2009-12-08 13:56:54)
标签: it  
80x86汇编指令详解(下)
 
3、位操做指令
位操做指令包括位测试和位扫描指令,能够直接对一个二进制位进行测试,设置和扫描。
1 位测试和设置指令
格式:BT DEST,SRC
BTC DEST,SRC
BTR DEST,SRC
BTS DEST,SRC
功能:按照源操做指定的位号,测试目的操做数,当指令执行时,被测试位的状态被复制到进位标志CF。
BT将SRC指定的DEST中一位的数值复制到CF。BTC将SRC指定的DEST中一位的数值复制到CF,且将DEST中该位取反。BTR将SRC 指定的DEST中一位的数值复制到CF,且将DEST中该位复位。BTS将SRC指定的DEST中一位的数值复制到CF,且将DEST中该位置位。
目的操做数为16位或32位通用寄存器或存储器,源操做数为16位或32位通用寄存器,以及8位当即数,当源操做数为通用寄存器时,必须同目的操做数类型一致。源操做数SRC以两种方式给出目的操做数的位号,即
· SRC为8位当即数,以二进制形式直接给出要操做的位号;
· SRC为通用寄存器,若是DEST为通用寄存器,则SRC中二进制值直接给出要操做的位号。若是DEST为存储器操做数,通用寄存器SRC为带符号整数, SRC的值除以DEST的长度所获得的商做为DEST的相对偏移量,余数直接做为要操做的位号。DEST的有效地址为DEST给出的偏移地址和DEST相 对偏移量之和。
BT,BTC,BTR,BTS指令影响CF标志位,其它标志位无定义。
 例 3.53
MOV AX,1234H
MOV ECX,5
BT AX,CX       ;CF=1AX=1234H
BTC AX,5       ;CF=1;AX=1214H
BTS AX,CX;      ;CF=0AX=1234H
BTR EAX,ECX      ;CF=1EAX=00001214H

  例 3.54

      ·MODEL SMALL
·586
·DATA
DATA1 DW 1234H,5678H
·CODE
·START UP
BTC DATA1,3;CF=0(DATA1)=123CH
MOV CX,20
BTR DATA1,CX;CF=1[DATA+2]=5668H
·EXIT
END
2 位扫描指令
格式:BSFDEST,SRC
BSRDEST,SRC
功能:BSF从低位开始扫描源操做数,若全部位都是0,则ZF=0,不然ZF=1。而且将第一个出现1的位号存入目的操做数。BSR从高位开始扫描源操做数,若全部位都是0,则ZF=0,不然ZF=1。而且将第一个出现1的位号存入目的操做数。
源操做数能够为16位32位通用寄存器或存储器。目的操做数为16位或32位通用寄存器。源操做数和目的操做数类型必须一致。
BSF,BSR指令影响ZF标志位,其它标志位无定义。
  例 3.55
MOV EBX,0F333EE00H
BSR EAX,EBX;ZF=1EAX=0000001FH=31
BSF EDX,EBX;ZF=1EDX=00000009H
3 进位标志指令
(1) 格式:CLC。功能:清除进位标志。
(2) 格式:STC。功能:设置进位标志。
(3) 格式:CMC。功能:进位标志取反。
4 条件设置字节指令
条件设置指令用于根据条件设置某一状态字节或标志字节,见表3 3。
格式:SETcondDEST
功能:测试条件(cond)若为真,则将目的操做数置01H,不然置00H。目的操做数容许为8位通用寄存器或8位存储器操做数。
条件cond与条件转移指令中的条件相同,共分三类。
(1) 以标志位状态为条件能够测试的标志位为ZF,SF,OF,CF,PF。
(2) 以两个无符号数比较为条件条件为高于、高于等于、低于、低于等于。
(3) 以两个带符号数比较为条件条件为大于、大于等于、小于、小于等于。
SET指令不影响标志位。
使用逻辑运算类指令应注意:
· 若是没有特别规定,参与运算的两个操做数类型必须一致,且只容许一个为存储器操做数;
· 若是参与运算的操做数只有一个,且为存储器操做数,必须使用PTR伪指令说明其数据类型; 
· 操做数不容许为段寄存器;
· 目的操做数不容许为当即数;
· 若是是存储器寻址,则前面介绍的各类存储器寻址方式都可使用。php

表 3.3  条件设置字节指令程序员

80x86汇编指令详解(下)


  3.3.4控制转移类指令
计算机执行程序通常是顺序地逐条执行指令。但常常需要根据不一样条件作不一样的处理,有时须要跳过几条指令,有时须要重复执行某段程序,或者转移到另外一个程序段去执行。用于控制程序流程的指令包括转移、循环、过程调用和中断调用。
1、转移指令
1 无条件转移指令
格式:JMP TARGET
功能:使程序无条件地转移到指令规定的目的地址TARGET去执行指令。转移分为短转移、段内转移(近程转移)和段间转移(远程转移)。
(1) 段内直接转移:
格式:JMP SHORT TARGET;短转移
JMP NEAR PTR TARGET;近程转移
功能:采用相对寻址将当前IP值(即JMP指令下一条指令的地址)与JMP指令中给出的偏移量之和送IP中。段内短转移(SHORT)指令偏移量为8 位,容许转移偏移值的范围为-128~+127。段内近程转移(NEAR)指令在16位指令模式下,偏移量为16位,容许转移偏移值范围为-215~+ 215-1。在32位指令模式下,偏移值范围为-231~+231-1。编程

  例 3.56
JMP NEXT
80x86汇编指令详解(下)
NEXT:MOV AL,BL
本例为无条件转移到本段内,标号为NEXT的地址去执行指令,汇编程序能够肯定目的地址与JMP指令的距离。
(2) 段内间接转移:
格式:JMP REG
JMP NEAR PTR [REG]
功能:段内间接转移,其中JMP REG指令地址在通用寄存器中,将其内容直接送IP实现程序转移。JMP NEAR PTR [REG]指令地址在存储器中,默认段寄存器根据参与寻址的通用寄存器来肯定,将指定存储单元的字取出直接送IP实现程序转移。在16位指令模式,转移偏 移值范围为80x86汇编指令详解(下)。在32位指令模式,转移偏移值范围为80x86汇编指令详解(下)
  例 3.57 设DS=1000HEBX=00002000H。
JMP BX          ;将2000H送IP
JMP NEAR PTR [BX]     ;将地址1000∶2000单元存放的一个字送IP
JMP NEAR PTR [EBX]    ;将段选择符为1000H,偏移地址为00002000H单元存放的双字送EIP。
(3) 段间直接转移:
格式:JMP FAR PTR TARGET
功能:段间直接转移,FAR PTR说明标号TARGET具备远程属性。将指令中由TARGET指定的段值送CS,偏移地址送IP。
  例 3.58 JMP FAR PTR NEXT。
在16位指令模式下,段基地送CS,偏移地址为16位,转移偏移值范围80x86汇编指令详解(下);在32位指令模式下,代码段选择符送CS,偏移地址为32位,转移偏移值范围为80x86汇编指令详解(下)
(4) 段间间接转移:
格式:JMP FAR PTR [Reg]
功能:段间间接转移,由FAR PTR [Reg]指定的存储器操做数做为转移地址。
在16位指令模式下,存储器操做数为32位,包括16位段基址和16位偏移地址。
  例 3.59
JMP FAR PTR [BX]      ;数据段双字存储单元低字内容送IP
;数据段双字存储单元高字内容送CS
在32位指令模式下,存储器操做数包括16位选择符。
  例 3.60  JMP FAR PTR [EAX]
指令中包含指向目标地址指针的门描述符或TSS描述符的指针,其所指的存储器操做数中仅选择符部分有效,指示调用门、任务门或TSS描述符起做用,而偏移部分不起做用。
2 条件转移指令
该类指令是根据上一条指令对标志寄存器中标志位的影响来决定程序执行的流程,若知足指令规定的条件,则程序转移;不然程序顺序执行。
条件转移指令的转移范围为段内短转移或段内近程转移,不容许段间转移。段内短转移(short)的转移偏移值范围为-128~+127。段内近程转移,在16位指令模式下转移偏移值范围为80x86汇编指令详解(下),在32位指令模式下转移偏移值范围为80x86汇编指令详解(下)
条件转移指令包括四类:单标志位条件转移;无符号数比较条件转移;带符号数比较条件转移;测试CX条件转移。
格式:Jcc TARGET
功能:若测试条件‘CC’为真,则转移到目标地址TARGET处执行程序。不然顺序执行。
(1) 单标志位条件转移指令,见表3 4。
例 3.61 JZ NEXT;若标志ZF=1则转移到标号NEXT处执行。
(2) 无符号数比较条件转移,见表3 5。
  例 3.62 JA NEXT;无符号数A与B比较,若A>B则转移到标号NEXT处执行程序
数组



表 3.4 单标志位条件转移指令
ide

80x86汇编指令详解(下)

表 3.5 无符号数比较条件转移指令函数

80x86汇编指令详解(下)

表 3.6 带符号数比较条件转移指令post

80x86汇编指令详解(下)

           

  例 3.63  JG NEXT;带符号数A与B比较,若A>B则转移到标号NEXT。
(4) 测试CX条件转移,见表3 7
测试


表 3.7 测试CX条件转移指令
spa

80x86汇编指令详解(下)


 例 3.64 JCXZ TARGET;CX=0转移到标号TARGET处。
JECXZ TARGET;ECX=0转移到标号TARGET处。
条件转移指令通常紧跟在CMP或TEST指令以后,判断执行CMP或TEST指令对标志位的影响来决定是否转移。
  例 3.65 符号函数
      80x86汇编指令详解(下)
假设x为某值且存放在寄存器AL中,试编程将求出的函数值f(x)存放在AH中。
·MODEL TINY
·CODE
·STARTUP
CMPAL,0
JGE BIG
MOV AL,0FFH
JMP DONE
BIG: JE DONE
MOV AL,1
DONE:MOV AH,AL
·EXIT
END
  例 3.66 编程实现把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来。
·MODEL TINY
·CODE
·STARTUP
MOV CH,4
AGAIN: MOV CL,4
ROL BX,CL
MOV AL,BL
ANDAL,0FH
OR AL,30H
CMP AL,3AH
JB NEXT
ADD AL,07H
NEXT: MOV DL,AL;DL←要显示的ASCII码
MOV AH,2;显示
INT 21H
DECCH
JNZ AGAIN
·EXIT
END
2、循环控制指令
这类指令用(E)CX计数器中的内容控制循环次数,先将循环计数值存放在(E)CX中,每循环一次(E)CX内容减1,直到(E)CX为0时循环结束。
格式:LOOPcc TARGET
功能:将(E)CX内容减1,不影响标志位,若(E)CX不等于0,且测试条件‘CC’成立,则转移到目标地址TARGET处执行程序。转移范围为-128~+127。如表3 8所示。
操作系统

表3.8 循环控制指令

80x86汇编指令详解(下)



  例 3.67 计算 80x86汇编指令详解(下)
·MODEL TINY
·CODE
·STARTUP
XOR EAX,EAX
MOV EDX,1
MOV ECX,1000
SUM:  ADD EAX,EDX
INC EDX
LOOPD SUM
·EXIT
END
  例 3.68 找出以ARRAY为首地址的100个字数组中的第一个非0项,送AX寄存器中。
·MODELSMALL
·DATA
ARRAYDW 0,0,0,0,1010H,…;(100个字)
·CODE
·STARTUP
MOV CX,64H
LEA BX,ARRAY
MOV SI,0FFFEH
ZERO: INC SI
INC SI
CMP WORD PTR [BX+SI],0
LOOPZ ZERO
MOV AX,[BX+SI]
·EXIT
END
关于过程调用和返回指令将在子程序一节中介绍。
  3.3.5串操做指令
80x86提供处理字符串的操做。串指连续存放在存储器中的一些数据字节、字或双字。串操做容许程序对连续存放大的数据块进行操做。
串操做一般以DS:(E)SI来寻址源串,以ES:(E)DI来寻址目的串,对于源串容许段超越。(E)SI或(E)DI这两个地址指针在每次串操做 后,都自动进行修改,以指向串中下一个串元素。地址指针修改是增量仍是减量由方向标志来规定。当DF=0,(E)SI及(E)DI的修改成增量;当DF= 1,(E)SI及(E)DI的修改成减量。根据串元素类型不一样,地址指针增减量也不一样,在串操做时,字节类型SI,DI加、减1;字类型SI,DI加、减 2;双字类型ESI,EDI加、减4。若是须要连续进行串操做,一般加剧复前缀。重复前缀能够和任何串操做指令组合,造成复合指令,见表3 9。
1、重复前缀指令


表 3.9 重复前缀指令

80x86汇编指令详解(下)


2、方向标志指令
格式:CLD/STD
功能:CLD为清除方向标志,即将DF置‘0’。STD为设置方向标志,即将DF置‘1’。
3、串传送指令
基本格式:[REP]MOVS DESTS, SRCS
[REP] MOVSB/MOVSW/MOVSD
功能:将DS:(E)SI规定的源串元素复制到ES:(E)DI规定的目的串单元中,见表3 10。

表 3.10 MOVS指令

80x86汇编指令详解(下)



该指令对标志位无影响。
若是加剧复前缀REP,则能够实现连续存放的数据块的传送,直到(E)CX=0为止。
在16位指令模式下,使用SI,DI,CX寄存器;在32位指令模式下,使用ESI,EDI,ECX寄存器。
  例 3.69
·MODEL SMALL
·DATA
SRC  DB 1,2,3,…(100个字节)
DEST DB 100DUP(?)
·CODE
·STARTUP
MOV AX,@DATA
MOV ES,AX
MOV CX,100
LEA SI,SRC
LEA DI,DEST
CLD
REP MOVSB
·EXIT
END
该程序将起始地址为SRC的100个字节内容传送到起始地址为DEST的存储单元。
4、串比较指令
基本格式:[REPE/Z] [REPNZ/NE] CMPS DESTS, SRCS
[REPE/Z] [REPNZ/NE] CMPSB/CMPSW/CMPSD
功能:由DS:(E)SI规定的源串元素减去ES:(E)DI指出的目的串元素,结果不回送,仅影响标志位CF,AF,PF,OF,ZF,SF。当源 串元素与目的串元素值相同时,ZF=1;不然ZF=0。每执行一次串比较指令,根据DF的值和串元素数据类型自动修改(E)SI和(E)DI。
在串比较指令前加剧复前缀REPE/Z,则表示重复比较两个字符串,若两个字符串的元素相同则比较到(E)CX=0为止,不然结束比较。在串比较指令 前加剧复前缀REPNE/NZ,则表示若两个字符串元素不相同时,重复比较直到(E)CX=0为止,不然结束比较。
  例 3.70 编程实现两个串元素比较,如相同则将全“1”送SUT单元,不然全“0”送SUT单元。
·MODEL SMALL
·DATA
DEST DB ‘A B C D E F G H’
SRC  DB ‘A B C E F F F E’
SUT  DB?
·CODE
·STARTUP
MOV AX,@DATA
MOV ES,AX
MOV CX,8
LEA SI,DEST
LEA DI,SRC
CLD
REPE CMPSB
JZ EQUL;ZF=1;CX=0
MOV BH,0;CX≠0,ZF=0
JMP DONE
EQUL: MOV BH,0FFH
DONE: MOV SUT,BH
·EXIT
END
5、串扫描指令
格式①: [REPE/Z] [REPNE/NZ] SCAS DESTS
格式②: [REPE/Z] [REPNE/NZ] SCASB/SCASW/SCASD
功能:由AL,AX或EAX的内容减去ES:(E)DI规定的目的串元素,结果不回送,仅影响标志位CF,AF,PF,SF,OF,ZF。当AL, AX或EAX的值与目的串元素值相同时,ZF=1;不然ZF=0。每执行一次串扫描指令,根据DF的值和串元素数据类型自动修改(E)DI。
在串扫描指令前加剧复前缀REPE/Z,则表示目的串元素值和累加器值相同时重复扫描,直到CX/ECX=0为止,不然结束扫描。若加剧复前缀 REPNE/NZ,则表示当目的串元素值与累加器值不相等时,重复扫描直到CX/ECX=0时为止,不然结束扫描。
该指令影响标志位为CF,AF,PF,SF,OF,ZF。
  例 3.71 在内存DEST开始的6个单元寻找字符‘C’,如找到将字符‘C’的地址送ADDR单元,不然0送ADDR单元。
·MODEL SMALL
·DATA
DEST DB ‘A B C D E F’
ADDR DW?;存“C”的地址,因此设置为字类型
·CODE
·STARTUP
MOV AX,@DATA
MOV ES,AX
MOV CX,6
LEA DI,DEST
MOV AL,‘C’
CLD
REPNE SCASB
JZ EQUL
MOV DI,0
JMP DONE
EQUL: DEC DI
DONE: MOV ADDR,DI
·EXIT
END
6、 串装入指令
格式:LODS SRCS
LODSB/LODSW/LODSD
功能:将DS:SI/ESI所指的源串元素装入累加器(AL,AX,EAX)中,每装入一次都按照DF值以及串元素类型自动修改地址指针SI/ESI,该指令通常不须加剧复前缀,而且不影响标志位。
7、 串存储指令
格式:[REP] STOS DESTS
[REP] STOSB/STOSW/STOSD
功能:将累加器\[AL,AX,EAX\]中值存入ES:DI/EDI所指的目的串存储单元中,每传递一次,都按DF值以及串元素类型自动修改地址指 针DI/EDI。若加剧复前缀REP,则表示将累加器的值连续送目的串存储单元,直到CX/ECX=0时为止。
该指令不影响标志位。
  3.3.6输入/输出指令
1、 输入指令
格式:IN DEST, SRC
功能:根据源操做数SRC给出的端口地址,将操做数从指定端口传送到目的操做数DEST处,其中DEST为AL,AX或EAX,端口地址SRC能够直接形式给出8位端口地址,或由DX寄存器以间接形式给出。
例 3.72
IN AL,10H
IN AX,20H
IN EAX,30H
IN AL,DX
IN AX,DX
IN EAX,DX
2、 输出指令
格式OUT DEST, SRC
功能:将源操做数SRC送到目的操做数DEST所指定的端口。其中源操做数SRC为AL,AX或EAX,目的操做数能够8位端口地址方式直接给出或以DX寄存器间接方式给出。
使用输入、输出指令应注意:
· 直接寻址方式端口地址为8位,共有0~255个端口地址;
· 间接寻址方式,只能用DX做为地址寄存器,寻址范围为64K字节;
· 每一个I/O地址对应的端口的数据长度为8位,传送8位数据占用一个端口地址,传送16位数据占用2个端口地址,传送32位数据占用4个端口地址。
3、 串输入指令
格式:[REP] INS DESTS, DX
[REP] INSB/INSW/INSD
功能:根据DX给出的端口地址,从外设读入数据送入以ES:DI/EDI为地址的目的串存储单元中,每输入一次,均根据DF的值和串元素类型自动修改 DI/EDI的值。若加剧复前缀REP,则表示连续从外设输入串元素存入目的串存储单元中,直到CX/ECX=0为止。
 例 3.73 从端口地址为1000H处取数存入内存BLOCK单元。
·MODEL SMALL
·DATA
BLOCKDB?
·CODE
·STARTUP
MOV AX,@DATA
MOV ES,AX
CLD
LEA DI,BLOCK
MOV DX,1000H
INS BLOCK,DX
·EXIT
END
4、串输出指令
格式:[REP] OUTS DX,SRCS
[REP] OUTSB/OUTSW/OUTSD
功能:将DS:SI/ESI所指的源串元素,按照DX寄存器指定的端口地址送往外设,每输出一次,均根据DF的值和串元素类型自动修改SI/ESI的值,若加剧复前缀REP,则表示连续向外设输出串元素,直到CX/ECX=0时为止。
  例 3.74 将内存BLOCK为首地址的100个字符送往端口地址为2000H的外设。
·MODEL SMALL
·DATA
BLOCKDB ‘A,B,…’(100个字符)
·CODE
·STARTUP
CLD
LEA SI,BLOCK
MOV CX,100
MOV DX,2000H
REP OUTSB
·EXIT
END
在使用带重复前缀的串输入输出指令时,必须考虑端口的数据准备或接收状态。
全部输入输出指令均不影响标志位。
  3.3.7处理器控制
1、 总线封锁前缀
格式:LOCK指令
功能:LOCK为指令前缀,可使LOCK引脚变成逻辑0,在LOCK引脚有效期间,禁止外部总线上的其它处理器存取带有LOCK前缀指令的存储器操做数。
可加LOCK前缀的指令:
(1) ADD/SUB/ADC/SBB/OR/XOR/AND Mem, Reg/imm;
(2) NOT/NEG/INC/NEC Mem;
(3) XCHG Reg, Mem或XCHG Mem, Reg;
(4) BT/BTS/BRT/BTC Mem, Reg/imm。
Mem为存储器操做数,Reg为通用寄存器,imm为当即数。
2、空操做
格式:NOP
功能:空操做,除使IP/EIP增1外,不作任何工做。该指令不影响标志位。
3、处理器等待指令
格式:WAIT
功能:检查BUSY引脚状态,等待协处理器完成当前工做。
4、处理器暂停指令
格式:HLT
功能:暂停程序的执行。当产生一个外部中断或非屏蔽中断时,才继续执行下一条指令。
  3.3.8中断指令与DOS功能调用
1、中断指令
在实模式下,中断矢量以4个字节存放在中断矢量表中,中断矢量表为1k字节(00000H~003FFH),中断矢量表容许存放256个中断矢量,每 个中断矢量包含一个中断服务程序地址(段值和16位偏移地址),中断矢量地址指针由中断类型码乘以4获得。
在保护模式下,用中断描述符表代替中断矢量表,每一个中断由8个字节的中断描述符来讲明,中断描述符表容许256个中断描述符,每一个中断描述符包含一个中断服务地址(段选择符、32位偏移地址、访问权限等)。中断描述符地址指针由中断类型码乘以8获得。

  中断指令格式:INT n
功能:产生中断类型码为n的软中断,该指令包含中断操做码和中断类型码两部分,中断类型码n为8位,取值范围为0~255(00H~FFH)。
软中断执行过程:
· 将标志寄存器FLAGS(或EFLAGS)压入堆栈;
· 清除TF和IF标志位;
· CS,IP/EIP压入堆栈;
· 实模式下,n×4获取中断矢量表地址指针;保护模式下,n×8获取中断描述符表地址指针;
· 根据地址指针,从中断矢量表或中断描述符表中取出中断服务程序地址送IP/EIP和CS中,控制程序转移去执行中断服务程序。
中断返回指令格式:IRET/IRETD
功能:该指令实如今中断服务程序结束后,返回到主程序中断断点处,继续执行主程序。
中断返回执行过程:
· IRET指令弹出堆栈中数据送IP,CS,FLAGS;
· IRETD指令弹出堆栈中数据送EIP,CS,EFLAGS。
其它中断类指令如表3 11所示。

表 3.11 中断类指令

80x86汇编指令详解(下)



2、DOS功能调用
系统功能调用是MS—DOS为程序员编写汇编语言源程序提供的一组子程序,包括设备管理、文件管理和目录管理等。
DOS规定使用软中断指令INT 21H做为进入各功能子程序的总入口,再为每一个功能调用规定一个功能号,引用功能号便可进入相应的子程序入口。DOS系统功能调用的使用方法概括以下:
(1) 传送入口参数到指定的寄存器中;
(2) 把要调用功能的功能号送入AH寄存器中;
(3) 用INT 21H指令转入子程序入口;
(4) 相应的子程序运行结束后,能够按照规定取得出口参数。
经常使用系统功能调用简介。
1 键盘输入单字符
这是1号系统功能调用,其调用格式为
MOV AH,1
INT 21H
该功能调用无入口参数。其功能为系统等待键盘输入,如是Ctrol-Break键则退出;不然将键入字符的ASCII码送入AL寄存器中,而且经过显示器显示该字符。
2 键盘输入字符串
这是0AH号系统功能调用,其功能为将键盘输入的字符串写入内存单元中。所以,首先在内存中定义一个缓冲区,缓冲区第一个字节存放规定字符串的最大字 节数,第二个字节由系统送入实际键入的字符数,从第三个字节开始用于存放键入的字符串,最后经过键入回车键来表示字符串的结束。若是实际键入的字符数未达 到最大规定数,其缓冲区的空余区间填0;若是实际键入数超过缓冲区的容量,则超出的字符自动丢失,并且响铃警告。注意,回车键值也存于缓冲区中。
例 3.75 使用格式举例。
·MODEL SMALL
·DATA
BUF  DB 20
DB?
DB 20 DUP(?)
·CODE
·STARTUP
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H
·EXIT
END
该程序在BUF为首地址的缓冲区定义了20个字符串字节的缓冲区,而且将缓冲区首地址送入DX中,调用0AH号子程序,系统等待用户键入字符串,每键 入一个字符,其相应的ASCII码将被写入缓冲区中,直到键入回车键,由系统输入实际键入字符数,送入缓冲区第二个字节中。
3 输出单字符
这是2号系统功能调用,其使用格式为:
MOV DL,‘A’
MOV AH,2
INT 21H
执行2号系统功能调用,将置入DL寄存器中的字符(以ASCII码形式表示)经过显示器显示出来(或从打印机输出)。
4 输出字符串
这是9号系统功能调用,其功能是将指定的内存缓冲区中的字符串从显示器显示输出(或从打印机输出),缓冲区中的字符串以字符‘$’做为结束标志。
例 3.76使用格式举例。 ·MODEL SMALL ·DATA BUF DB ‘Thank you $’ ·CODE ·STARTUP MOV DX,OFFSET BUF MOV AH,9 INT 21H ·EXIT END 5 返回操做系统 这是4CH号系统功能调用,使用格式为 MOV AH,4CH INT 21H 在用户程序结束处插入此调用,则返回到DOS操做系统,显示器显示系统提示符.

相关文章
相关标签/搜索