汇编基础知识

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

代码为十进制

代码字符代码字符代码字符代码字符

0 32 [空格] 64 @ 96 `

1 33 ! 65 A 97 a

2 34 " 66 B 98 b

3 35 # 67 C 99 c

4 36 $ 68 D 100 d

5 37 % 69 E 101 e

6 38 & 70 F 102 f

7 39 ' 71 G 103 g

8 ** 40 ( 72 H 104 h

9 ** 41 ) 73 I 105 i

10 ** 42 * 74 J 106 j

11 43 + 75 K 107 k

12 44 , 76 L 108 l

13 ** 45 - 77 M 109 m

14 46 . 78 N 110 n

15 • 47 / 79 O 111 o

16 • 48 0 80 P 112 p

17 • 49 1 81 Q 113 q

18 • 50 2 82 R 114 r

19 51 3 83 S 115 s

20 52 4 84 T 116 t

21 53 5 85 U 117 u

22 • 54 6 86 V 118 v

23 • 55 7 87 W 119 w

24 • 56 8 88 X 120 x

25 • 57 9 89 Y 121 y

26 • 58 : 90 Z 122 z

27 59 ; 91 [ 123 {

28 • 60 < 92 \ 124 |

29 • 61 = 93 ] 125 }

30 - 62 > 94 ^ 126 ~

31 63 ? 95 _ 127 •

1.16位地址的寻址能力为64kb,则一个段的最大长度为64kb。

2.debug程序命令:r:查看、修改cpu中寄存器的内容d:查看内存中的内容

e:修改内存中的内容u:将内存中的机器指令翻译成汇编指令

t:单步执行指令a:以汇编指令的格式在内存中写入一条机器指令(未执行)

3.push指令:push ax(或内存单元):(sp)=(sp)-2

将ax(或内存单元)内数据送入ss:sp中push [0]

pop指令:pop ax(或内存单元):将ss:sp中的数据送入ax(或内存单元)中

(sp)=(sp)+2

4.dos系统中.exe文件中的程序加载过程: ____________

| |

程序段的前缀ds:0指向的地方:|—————|

| psp |

程序开始的地方cs:ip指向的地方:|—————|

| |

| 程序|

| |

5.在汇编源程序中,数据不能以字母开头。

6.将字母转化为大写字母:and al,11011111b 将字母转化为小写字母:or al,00100000b (b表示二进制,不能省)

7.si和di是和bx功能相近的寄存器,但不能分成两个8位的寄存器来使用。

8.一般来说,在需要暂存数据的时候,我们都应该使用栈。

9.reg(寄存器)的集合包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di

sreg(段寄存器)的集合包括:ds,ss,cs,es

10.bx、si、di、bp:这四个寄存器都可以单独使用,或只能以四种组合出现:bx和si、bx和di、bp和si、bp和di

11.只要在[...]中使用bp,且指令中没有显性地给出段地址,则段地址默认在ss中。

12.以下形式等同:mov ax,[bx+si+200]

mov ax,[bx+200+si]

mov ax,[200+bx+si]

mov ax,200[bx][si]

mov ax,[bx].200[si]

mov ax,[bx][si].200

13.mov word ptr ds:[0],1 指指令访问的是字单元mov byte ptr [bx],1 指指令访问的是字节单元

14.dup操作符与db、dw、dd等数据定义伪指令配合使用,用来进行数据的重复。

如:db 3 dup (0) 定义了3个字节,值都为0,相当于db 0,0,0

db 3 dup ('abc''ABC') 相当于db 'abcABCabcABCabcABC'

15.offset操作符的功能是取得标号的偏移地址。如:mov ax,offset s 相当于将s的偏移地址赋值给ax。

seg操作符的功能是取得标号的段地址。

16.jmp指令:jmp short 标号功能:实现段内短转移,(ip)=(ip)+8位位移,对ip的修改范围为-128~127。对应机器码中包含的是位移,不包含转移的目的地址

jmp near ptr 标号功能:实现段内近转移,(ip)=(ip)+16位位移,对ip的修改范围为-32768~32767。

jmp far ptr 标号功能: 实现段间转移,(cs)=标号所在的段地址(ip)=标号所在的偏移地址

jmp 16位寄存器功能:(ip)=(16位寄存器)

jmp word ptr 内存单元地址功能:将字单元中的数据作为ip的值

jmp dword ptr 内存单元地址功能:(cs)=(内存单元地址+2) (ip)=(内存单元地址)

17.jcxz指令:jcxz 标号功能:实现短转移,如果(cx)=0,则转移到标号处执行。否则继续向下执行。

18.loop指令:loop 标号操作:(cx)=(cx)-1,如果(cx)不为零则转移到标号处执行。

19.在内存地址空间中,b8000h~bffffh共32kb的空间为显示缓冲区。显示缓冲区分为8页,每页4kb,显示器可以显示任何一页的内容。一般情况下,显示第一页的内容。显示器可以显示25行,每行80个字符,每个字符可以有256种属性。

在一页的显示缓冲区中:偏移000~09f对应显示器的第1行

偏移0a0~13f对应显示器的第2行

偏移140~1df对应显示器的第3行

依此类推,偏移f00~f9f对应显示器的第25行一个字符占2个字节的存储空间。偶地址放字符,奇地址放字符的属性。

属性字节的格式:7 6 5 4 3 2 1 0

BL R G B I R G B R:红G:绿B:蓝

闪烁背景高亮前景

20.ret指令:利用栈中数据修改ip的值,从而实现近转移。操作:(ip)=((ss)*16+(sp)) (sp)=(sp)+2 :pop ip

retf指令:利用栈中数据修改cs和ip的值,从而实现远转移。操作:(ip)=((ss)*16+(sp)) (sp)=(sp)+2 :pop ip

(cs)=((ss)*16+(sp)) (sp)=(sp)+2 :pop cs

iret从堆栈中弹出3个参数,一个给ip,一个给cs,一个给flag标志位

21.call指令:call 标号将当前的ip压栈,转移到标号处执行指令。操作:(sp)=(sp)-2 ((ss)*16+(sp)=(ip)

相关文档
最新文档