8086指令系统汇编实训实例资料Word文档格式.docx

上传人:b****5 文档编号:18829434 上传时间:2023-01-01 格式:DOCX 页数:25 大小:74.35KB
下载 相关 举报
8086指令系统汇编实训实例资料Word文档格式.docx_第1页
第1页 / 共25页
8086指令系统汇编实训实例资料Word文档格式.docx_第2页
第2页 / 共25页
8086指令系统汇编实训实例资料Word文档格式.docx_第3页
第3页 / 共25页
8086指令系统汇编实训实例资料Word文档格式.docx_第4页
第4页 / 共25页
8086指令系统汇编实训实例资料Word文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

8086指令系统汇编实训实例资料Word文档格式.docx

《8086指令系统汇编实训实例资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《8086指令系统汇编实训实例资料Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

8086指令系统汇编实训实例资料Word文档格式.docx

2)段地址:

04ba:

100或4ba:

100

3)默认段寄存器不写,只写偏移量,如:

100;

4)确定地址范围可以有两种表示方式:

a)段地址:

起始地址的偏移量结束地址的偏移量,如:

100110;

b)段地址:

起始地址的偏移量L(长度),如:

100L10;

DEBUG软件基本指令用法一览表

指令

格式

功能

备注

A

A[首地址]

编译汇编语言指令

A100

C

C[区段1][区段长度][区段2]

将两块内存作比较

C100L20200

D

D[地址][长度]&

[地址范围]

显示内存的内容

D100L20

E

E[地址]空格键编辑下一个

编辑内存内容

E100

F

F[地址][长度][内容]

填充指定内存区块内容

F100L1090

G

G=[地址][断点1][断点2]

带有任选断点执行

G=100……

H

H[数1][数2]

十六进制数加减

H4433

I

I[端口地址]

读/显示输入字节

I70

L

L[地址]或[磁碟,磁轨,扇区]

装入文件或磁区

L100212

M

M[原地址][长度][目标地址]

传送内存区块

M100L10110

N

N[文件名]

定义文件名

N

O

O[端口位址]

输出字节到端口

O7019

Q

退出DEBUG界面

R

R[寄存器]

显示修改寄存器

RAX

S

S[地址][长度]‘参数’

对字符进行检索

S100L70'

j'

T

T[=地址]或[指令条数]

单步追踪

U

U[地址][指令长度]

反汇编

U100默认32字节

W

W[地址]或[指定BX、CX范围]

写入文件,默认写入

CS:

W200

实例:

查看主板BIOS信息:

  ①输入“DFE00:

0”,回车后看到的结果就是主板BIOS的厂商信息。

②接着再输入“DFFFF:

5L8”,回车后,主板的BIOS版本日期也出来了。

 

三、ASCII码与BCD编码

ASCII码是美国国家信息交换标准字符码(AmericanStandardCodeforInformationInterchange)的字头缩码。

早期的ASCII码采用7位二进制代码对字符进行编码。

它包括32个通用控制字符,10个阿拉伯数字,52个英文大,小字母,34个专用符号共128个。

7位ASCII代码在最高位添加一个“0”组成8位代码,正好占一个字节,在存储和传输信息中,最高位常作为奇偶校验位使用。

扩展ASCII码,即第八位不再视为校验位而是当作编码位使用。

扩展ASCII码有256个。

数0-9ASCII码的编码值为30H-39H,大写英文字母A-Z的编码值为41H-5AH,小写英文字母a-z的编码值为61H-7AH。

四、DOS常用的几个系统功能调用

1.调用方法:

DOS功能调用的子程序已按顺序编号,功能号(00H~68H),其调用方法是:

(1)功能号→AH

(2)入口参数、出口参数→指定寄存器

(3)INT 

21H

(4)INT 

20H此为结束语句

2、常用的系统功能调用

1)1号调用——从键盘输入单个字符

人口参数:

ah=01;

出口参数:

al=输入字符的ascii码

功能:

等待从键盘输入一个字符并送入al。

2)2号调用——在显示器上显示输出单个字符

ah=02;

dl=待显示字符的ascii码

将dl中的字符送显示器显示。

3)9号调用——在显示器上显示输出字符串

入口参数:

ah=09h;

ds:

dx=字符串的起始地址;

将当前数据区中DS:

DX所指向的字符串送显示器显示,注意字符串必须以'

$'

结尾。

4)0AH号调用——从键盘输入字符串

ah=0ah;

dx=输入缓冲区的起始地址;

第1个字节指出缓冲区能容纳的字符个数,即缓冲区长度,不能为0。

第2个字节保留,以存放实际输入的字符个数。

第3个字节开始存放从键盘输入的字符串。

从键盘接收字符串送入内存的缓冲区,同时送显示显示。

五、命名文件过程

1.N文件名.COM;

命名文件,文件必须以.com结尾

  2.输入RBX;

查看BX寄存器,存放文件长度值高八位

3.输入RCX ;

以CX存放文件长度值的低八位

  4.输入W;

用W命令将该程序写入磁盘中,即存盘

六、DEBUG实验程序

1.显示一个字符

MOVDL,41

MOVAH,2

INT21

INT20

2.显示所有ASCII码的程序

MOVCX,0100

MOVDL,00

MOVAH,02;

0105

INT21

INCDL

LOOP0105

INT20

3.由键盘输入任意字符串,然后显示出来

MOVDX,0116;

0116:

字符个数,0117:

实际输入数(包含$),0118:

实际数

MOVAH,0A

MOVDL,0A

MOVAH,02

MOVDX,0118

MOVAH,09

INT20;

0114

DB20;

0116

011606

4.显示一字符串

MOVDX,109

MOVAH,09

INT21

INT20

DB'

MayIhelpyou?

$'

0109

5.将1~16放入以2000H开始的单元中;

asm-

MOVBX,2000

MOVCX,0010

MOVAL,01

MOV[BX],AL;

0108

INCAL

INCBX

LOOP0108

INT20

6.将1000H开始的4个单元中的大数找出来;

MOVBX,1000

MOVAL,[BX]

MOVCX,0003

INCBX;

CMPAL,[BX]

JNB010F

DECCX;

010F

JNZ0108

MOVDL,AL

7.比较连续两个单元中数的大小,相等=88,不相等=FFH;

comp50-2.COM

MOVSI,1000

MOVDI,2000

MOVCX,0002

MOVAL,[SI];

CMPAL,[DI]

JZ0113

MOVAL,FF

JMP0119

INCSI;

0113

INCDI

LOOP0109

MOVAL,88

INT20;

0119

8.在1000h开始的100个单元中,搜索“$”字符,将字符的地址放入BX中,搜索不到则BX=FFFFH

MOVDI,1000

MOVAL,24

MOVCX,0064

CLD

REPNZ

SCASB

JZ0112

MOVBX,FFFF

JMP0115

DECDI;

0112

MOVBX,DI

9.将5000为首的4个数,测试该数的最高位,为1送2000单元,为0送1000号单元;

stor-

MOVSI,5000

MOVDI,1000

MOVBX,2000

MOVCX,0004

LODSB

TESTAL,80

JNZ0115

STOSB

JMP011A

XCHGBX,DI;

0115

XCHGBX,DI

DECCX

JNZ010D

010D

10.比较SI和DI的内容,相等则AL=00,不等则AL=FFH;

COMPS.COM

REPZ

CMPSB

JMP0114

MOVAL,00;

11.人机对话程序

:

0100DB“What’syourname?

$”

0113DB“Pleaseinputyourcode?

012cDB“OK!

$”

0131MOVDX,0100;

显示What’syourname?

MOVAH,09

MOVDL,0A

MOVAH,02

MOVDL,0D

MOVDX,0200;

从键盘输入名字

MOVAH,0A

MOVDX,0202;

把名字显示出来

MOVDX,0112;

显示Pleaseinputyourcode?

MOVDX,0210;

从键盘输入密码

MOVDX,012A;

显示OK!

:

0200DB06

0210DB08

七、汇编语言上机过程

1.上机前的软件准备:

MASM510,Uedit32

2.在MS-DOS操作系统下操作

.文本编辑器(如:

EDIT.COM,Uedit32等)

.汇编程序 (如:

MASM.EXE,TASM.EXE等)

.连接程序 (如:

LINK.EXE等)

.调试程序 (如:

DEBUG.EXE等)

八、汇编源程序

1.在屏幕上显示一个字符的源程序程序:

programsegment  ;

定义段,段名“program”可任意取

  assumecs:

program ;

把上面段的段基址放入CS,即程序所在段的位置

movdl,41h    ;

将显示字符的ascii码装入DL

  movah,2     ;

21功能的2号子功能调用,向屏幕输出一个字符

  int21h ;

21号DOS功能调用

movah,4ch;

汇编结束,DOS返回

int21h

programends;

段终止

  end;

汇编终止

2.显示所有ASCII的源程序:

programsegment;

定义段;

段名“program”可任意取

  assumecs:

program;

把上面定义段的段基址放入CS

  movcx,100h;

装入循环次数

  movdl,0;

装入第一个ASCII码,随后每次循环装入新码

next:

movah,2

  int21h

  incdl;

INC:

递增指令,每次将数据寄存器DL内的数值加1

  loopnext;

循环指令,执行一次CX减1,直至CX为0,循环终止                         

movah,4ch;

 

programends;

  end;

3.在屏幕上显示一个指定字符串的源程序:

datasegment

stringdb'

'

dataends

codesegment         ;

定义段,段名为code

assumecs:

code,ds:

data    ;

程序所在段的位置,代码段放在CS寄存器中;

数据段放在DS寄存器中

start:

movax,data      ;

字符串数据段的开始地址

movds,ax       ;

ds←输出字符串数据段段地址

leadx,string     ;

dx←输出字符串偏移地址

movah,09       ;

9号子功能(显示字符串)调用

int21h;

movah,4ch;

完成输出显示,DOS返回

int21h

codeends;

代码段结束

endstart;

整个汇编结束

4.显示所有26个大小写英文字符alla-z.asm

abcsegment

abc

movcx,1ah

movdl,41h

movah,02h

int21h

incdl

loopnext

movdl,61h

next2:

loopnext2

movah,4ch

abcends

end

5.对话程序dialog2.asm

DATASEGMENT

BUFDB09H;

允许个数

DB?

实际个数

DB10DUP(?

);

真实输入

HITDB"

INPUTQTOQUITORENYKEYCONTINUE.$"

NAMDB0AH,0DH,"

WHAT'

SYOURNAME?

$"

AGEDB0AH,0DH,"

PLEASEINPUTYOURAGE:

WANDB0AH,0DH,"

OK!

$"

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

DISP0:

MOVDX,OFFSETHIT

MOVAH,09H

INT21H

MOVAH,01H

INT21H

CMPAL,'

Q'

JZQUIT

DISP1:

MOVDX,OFFSETNAM

KELBD1:

MOVDX,OFFSETBUF

MOVAH,0AH

DISP2:

MOVDX,OFFSETAGE

KELBD2:

DISP3:

MOVDX,OFFSETWAN

INT21H

QUIT:

MOVAH,4CH

CODEENDS

ENDSTART

6.一位数的减法,6-2=4ab.asm

bufdb06h,02h

codesegment

assumecs:

data

movax,data

movds,ax

moval,buf

subal,buf+1

movdl,al

ordl,30h

codeends

endstart

7.显示2位数结果disp10,16-3

LISTDB16,48,?

CALLADSUB

CALLOUTPR

INT21H

ADSUBPROC

MOVAL,LIST

ADDAL,LIST+1

DAA

MOVLIST+2,AL

RET

ADSUBENDP

DISPLPROC

ORDL,30H

MOVAH,02H

DISPLENDP

OUTPRPROC

MOVAL,LIST+2

MOVAH,0

MOVBL,10

DIVBL

MOVDL,AL

MOVBH,AH

CALLDISPL

MOVDL,BH

OUTPRENDP

CODEENDS

LISTDB16,3,?

CODESEGMENT

SUBAL,LIST+1

MOVAH,0

8.比较A、B两单元中的数,将较大的数送A单元。

adb39h

bdb94h

cdb?

assumecs:

movax,data

moval,a

cmpal,b

jncnext

xchgal,b

movc,al

movah,4ch

endstart

9.显示比较两个数的大小Comp-ab.asm

adb20h

bdb92h

movds,ax

moval,a

cmpb,al

jabga

movdl,'

a'

movbl,'

b'

jmpdisp

bga:

movdl,'

disp:

int21h

>

movdl,bl

movah,4ch

endstart

10.统计负数的个数;

nega.asm

bufdb2,-1,-56,-23,15,29,-5,28,3,4

db-22,-33,-44,-55,66,77,88,99,-11,9

countequ20

negadb?

movsi,offsetbuf

movdl,0

movcx,count

lp:

moval,[si]

andal,al

jnsnext

incdl

incsi

looplp

movnega,dl

endstart

11.计算字符串的长度;

str-len.asm

在STR开始的缓冲区中存放有一个字符串,结束标志为$,计算该字符的长度并显示出来。

DATASEGMENT

STRDB'

ABCDEFGHH$'

LENDB0

DATAENDS

STACKSEGMENTPARASTACK'

STACK'

STTDB100DUP(?

STACKENDS

ASSUMECS:

DATA,SS:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1