文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言小程序例子

汇编语言小程序例子

汇编语言小程序例子
汇编语言小程序例子

汇编语言小程序例子

1.编写统计AX中1、0个数的源程序。1的个数

存入CH,0的个数存入CL。

CODE SEGMENT

ASSUME CS:CODE

START: MOV CX, 0

MOV DX,17

AA1: SUB DX, 1

JZ AA3

SHL AX, 1

JNC AA2

INC CH

JMP AA1

AA2: INC CL

JMP AA1

AA3: MOV AH,4CH

INT 21H

CODE ENDS

END START

2.编写比较两个字符串STRING1和STRING2所

含字符是否完全相同的源程序,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。

程序:

DATA SEGMENT

R1 DB 'MATCH',0AH,0DH

R2 DB 'NO MATCH',0AH,0DH STRING1 DB 'XXXXX'

N1 EQU $-STRING1

STRING2 DB 'YYYYY'

N2 EQU $-STRING2

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA

MOV DS,AX

MOV AX,N1

CMP AX,N2

JNZ AA1

ADD AX,1

LEA SI,STRING1

LEA DI,STRING2 AA2: MOV BL,[SI] MOV BH,[DI]

INC SI

INC DI

SUB AX,1

JZ AA3

CMP BL,BH

JZ AA2

JMP AA1

AA3: LEA BX,R1

MOV CX,7

AA4: MOV DL,[BX]

INC BX

MOV AH,2

INT 21H

LOOP AA4

JMP E

AA1: LEA BX,R2

MOV CX,10

AA5: MOV DL,[BX] INC BX

MOV AH,2

INT 21H

LOOP AA5

E: MOV AH,4CH INT 21H

CODE ENDS

END START

3.从键盘读入一个四位的十六进制数,CRT显示

等值的二进制数.

由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。由于数字‘0’~ ‘9’的ASCⅡ码为30H~39H,字母‘a’~‘f’与‘A’~‘F’的ASCⅡ码为61H~66H 与41H~46H ,因此,如果输入的字母为数字‘0’~‘9’,则其低4位即为对应的二进制位;如果输入的字符为字母‘a’~‘f’或‘A’~‘F’,则需要减7,然后通过移位将低4位依次输出。

汇编程序如下:

DATA SEGMENT

MSG1 DB 'Hex:','$'

MSG2 DB 0DH,0AH,'Binary:', '$'

COUNT EQU 4

BUF DB 4 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX, DATA

MOV DS, AX

LEA DX, MSG1

MOV AH, 9

INT 21H

MOV CX, COUNT

MOV SI, 0

INPUT: ;通过四次循环从键盘读入四位十六进制数

MOV AH, 1

INT 21H

MOV BUF[SI], AL

DEC CX

INC SI

CMP CX, 0

JNZ INPUT

NEXT3: LEA DX, MSG2

MOV AH, 9

INT 21H

MOV CX, COUNT

MOV SI, 0

NEXT2: MOV BL, BUF[SI]

CMP BL , '9'

JBE OK ;读入的字符<=9转向OK:

SUB BL, 7 ;读入字符>= 9 减7

OK: PUSH CX

MOV CL ,4

SHL BL, CL ; 逻辑左移4位,低4位à高4位

MOV CX, 4 ; 4次循环将当前处理字符的4位二进制输出

NEXT1: MOV DL, '0'

SHL BL, 1

JNC SKIP

INC DL

SKIP: MOV AH, 2

INT 21H

LOOP NEXT1

POP CX ;

INC SI

LOOP NEXT2 ; 4次循环将4位十六进制数,每位转换为对应的4位二进制

EXIT: MOV AH, 4CH

INT 21H

CODE ENDS

END START

4.设从STRING开始存放一个以$为结束标志的字

符串,试编写把字符串中的字符进行分类的源程序,数字字符送入NUM开始的内存中,大写字母送入BCHAR开始的内存区中,小写字母存入LCHAR开始的内存中,其他字符存入

OTHER开始的内存区中。

DATA SEGMENT

STRING DB 'abc123ABC','$'

N EQU $-STRING

NUM DB N DUP(?)

BCHAR DB N DUP(?)

LCHAR DB N DUP(?)

OTHER DB N DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA

MOV DS,AX

LEA BX,STRING

DEC BX

LEA SP,BCHAR

LEA CX,LCHAR

LEA DX,OTHER

LEA SI,NUM

AA1:INC BX

MOV AL,[BX] //判断是否为$,是否结束

CMP AL,’$’

JZ AA5

CMP AL,30H //判定数字字符

JC AA4

CMP AL,39H

JA AA2

MOV [SI],AL

INC SI

JMP AA1

AA2:CMP AL,41H //判定大写字母

JC AA4

CMP AL,5AH

JA AA3

MOV DI,SP

MOV [DI],AL

INC SP

JMP AA1

AA3:CMP AL,61H //判定小写字母

JC AA4

CMP AL,7AH

JA AA4

MOV DI,CX

MOV [DI],AL

INC CX

JMP AA1

AA4:MOV DI,DX //判定其他

MOV [DI],AL

INC DX

JMP AA1

AA5:MOV AH,4CH // 返回DOS 结束

INT 21H

CODE ENDS

END START

5.试编写找出首地址为BUF数据块中的最小偶数

(该数据块中有100个带符号字节数),并以十六进制的形式显示在CRT上的源程序。

答:

DATA SEGMENT

BUF DB 100

DUP(?) ;要比较的数

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:

MOV AX,DATA

MOV DS,AX

BX,BUF ;BUF首地址送BX

MOV

CL,101 ;循环控制

MOV

DL,126 ;DL存放最小偶数

MOV

AH,0 ;标志是不是有偶数

LOOP1:

DEC

CL ;循环计数减1

JZ

TOEND ;ZF标志0则跳转

AL,[BX] ;BX内存内容送AL

INC

BX ;BX指向下一内存单元

SHR

AL,1 ;AL逻辑右移一位

JC

LOOP1 ;是基数则接着循

SHL

AL,1 ;是偶数,因为上面右移了左移得到原数值

MOV

AH,1 ;能进行这一步

则说明数值中有偶数

CMP

AL,DL ;与CH比较大小

JGE

LOOP1 ;AL大DL小则循环

MOV

DL,AL ;保证DL存放最小偶数

JMP

LOOP1 ;CL不为0 继续循环

TOEND:

CMP AH,1

JC

L ;有借位则说明数值中无偶数直接返DOS

汇编语言程序设计教学大纲

《汇编语言程序设计》课程教学大纲 二、课程简介 汇编语言是计算机能够提供给用户使用的最快最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而,对程序的空间和时间要求很高的场合及需要直接控制硬件的应用场合,汇编语言的应用是必不可少三、课程目标 汇编语言课程是计算机专业的一门专业选修课。通过本课程的学习,应使学 生系统地了解计算机组成原理与内部的运行机理,掌握汇编语言程序设计及相关 知识,为学习本专业后继课程和进行与硬件有关的技术工作打下良好基础。通过 上机实验,使学生受到软硬件实验的初步训练,并培养学生分析问题和解决问题 的能力。 四、教学内容及要求 第一章基础知识 1.教学内容 (1) 为什么要用汇编语言编写程序 (2) 进位计数制与不同基数的数之间的转换 (3) 二进制数和十六进制数运算 (4) 计算机中数和字符的表示 (5) 几种基本的逻辑运算 2.基本要求 了解机器指令、代码指令、机器语言、汇编指令、汇编语言、汇编语言源程 序、汇编程序、汇编等概念;掌握进位计数制与不同基数的数之间的转换及

运算;计算机中数和字符的表示;“与”、“或”、“非”、“异或”等几种基本的逻辑运算; 第二章80X86计算机组织 1.教学内容 计算机系统概述、存储器、中央处理机和外部设备。 2.基本要求 理解计算机的硬件和软件系统及其关系。掌握计算机的基本结构及总线;存储器的内容、地址及存储器的分段;中央处理机的组成、80X86系列CPU工作寄存器构成和功能,特别是段寄存器和标志寄存器;外设接口、端口和8086/8088的端口地址范围和访问方法。 第三章80X86的指令系统 1.教学内容(重点内容) IBM PC机的寻址方式、IBM PC机的指令系统。 2.基本要求 熟练掌握IBM PC机寻址方式及物理地址的计算;数据传送、算术、逻辑、串处理、控制转移和处理机控制指令六组中的所有指令的格式、操作、及影响的标志位。了解机器语言的指令组成; 第四章汇编语言程序格式 1.教学内容 汇编程序功能、伪操作、汇编语言程序格式、汇编语言程序的上机过程。 2.基本要求 掌握DEBUG程序和命令及能用DEBUG 程序调试和运行简单小程序;汇编语言上机步骤、汇编程序的功能;数据定义及存储器分配、表达式赋值“EQU”和“=”、段定义、程序开始和结束、对准、基数控制等六类伪操作;汇编语言程序格式中的名字、操作、操作数和注释等项。 第五章循环与分支程序设计 1.教学内容 程序设计的一般步骤和基本结构、循环程序设计和分支程序设计 2.基本要求 掌握汇编语言程序的编制步骤和结构化程序设计的三种基本结构;循环的设计方法和多层循环的设计;分支程序的设计方法,并能编制相应的程序。第六章子程序结构 1.教学内容 子程序的设计方法、嵌套与递归子程序、子程序举例和DOS系统功能调用

基础的汇编语言小程序

基础的汇编语言小程序 1.1 Hello World !程序(完整段) (注:所有的标点符号以及空格回车均为英文输入法状态下的,否则报错!) DATAS SEGMENT STRING DB ‘Hello World !’,13,10,’$’ DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H MOV AH,4CH INT 21H CODES ENDS END START 1.2 Hello World !程序(简化段) .MODEL SMALL .DATA

STRING DB’Hello World !’,13,10,’$’ .STACK .CODE .STARTUP LEA DX,STRING MOV AH,9 INT 21H .EXIT END 2.1完整段的求3+5的和 DATA SEGMENT FIVE DB 5 DATAS ENDS STACKS SEGMENT DB 128 DUP(?) STACKS ENDS CODES SEGMENT ASSUME CD:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AL,FIVE

ADD AL,3 ADD AL,30H MOV DL,AL MOV AH,2 MOV AH,4CH INT 21H CODES ENDS END START 2.2;简化段的求3+5的和.MODEL SMALL .DATA FIVE DB 5 .STACK DB 128 DUP (?) .CODE .STARTUP MOV AL,FIVE ADD AL,3 ADD AL,30H MOV DL,AL MOV AH,2 INT 21H

基本演示汇编语言实验操作方法

基本演示1汇编语言实验操作方法 一.实验的基本方法(MASM宏汇编子目录下) 1.在DEBUG下运行汇编指令或简单小程序 在DEBUG提示符下,用汇编命令A:输入汇编指令或简单小程序,用单步命令T 或全程命令G来执行,并检查执行中间结果与最后结果。 2.标准汇编程序上机方法 A.建立ASM文件,用https://www.wendangku.net/doc/d414636322.html,全屏幕编辑文件或其他编辑文件建立扩展名为ASM的源程序. B.用MASM(或ASM)产生扩展名为OBJ目标文件。 C.用LINK产生扩展名为EXE可执行文件。 D.在DEBUG下,把文件调入内存,调试程序。 E.在DOS下可直接执行扩展名为EXE的文件。(详细过程) 二.汇编语言的工作环境. A.硬件环境 IBM-PC及其系列机 内存256K字节以上 外存:硬盘或至少一个软驱 CPU:80586以上 显示器:单色或彩色显示器 键盘:标准ASCII码键盘 B.软件环境 编缉程序:https://www.wendangku.net/doc/d414636322.html,或其他编缉程序 汇编程序:MASM.EXE或ASM.EXE 连接程序:LINK.EXE 调试程序:https://www.wendangku.net/doc/d414636322.html,或DEBUG.EXE

A命令 在命令A后跟地址,按回车输入程序,可以连续输入,当按下回车后,就退回到DEBUG下。 T命令

T命令为跟踪命令。 G命令 该地址指定了运行的起始地址,如不指定则从当前的cs:ip开始运行EDIT.EXE

怎样生成.exe文件

生成.obj文件

基本演示2DEBUG命令的使用 A.程序调用命令 C>DEBUG[D:][PATH][FILENAME[.EXT]][PARM1][PARM2] 其中,文件名是被调试文件的名字。如未键入文件名。可用DEBUG命令N和L 把需要文件装入存储器后再调试。D指定驱动器,PATH为路径,FILENAME为文件名,PARM为命令参数 B.显示存储单元命令 -D[ADDRESS]或;ADDRESS地址 -D[RANGE];RANGE范围 C.修改存储单元内容命令 -E ADDRESS[LIST] D.检查和修改寄存器内容命令 -R[REGISTER NAME];Register name寄存器名字 E.汇编命令 -A[ADDRESS] F.跟踪命令 -T[=ADDRESS][VALUE];Value变量值 G.运行命令 -G[=ADDRESS][ADDRESS2[ADDRESS3] H.反汇编命令 -U[ADDRESS] -U[RANGE]

51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

新版汇编语言程序设计习题答案(钱晓捷主编)电子教案

新版汇编语言程序设计习题答案(钱晓捷主 编)

新版汇编语言程序设计习题答案(钱晓捷主编) 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1.2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1.4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.9、完成下列二进制数的运算 (1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001 (5)1011 ∧~1011 (8)1011 ⊕ 1001 1001(6)1011 ∨1001(7) 1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符? 1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符? 1.12、简述Intel 80x86系列微处理器在指令集方面的发展。 1.13、什么是DOS和ROM-BIOS? 1.14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。 1.16、什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

Windows汇编语言程序设计基础

第1章Windows汇编语言程序设计基础 Windows汇编语言程序分为控制台编程和图形界面编程两种,控制台编程相对简单一些。为了由浅入深,本书从控制台编程开始讲解。 读者总希望用最快的速度掌握书中的概貌,为此从一个最简单的程序开始。一些汇编语言语法也结合程序进行讲解,有些指令和语法用注解的方法说明。 1.1 第一个完整的Windows汇编语言程序 Windows汇编语言程序有自己的编程规范,它的编程规范比Visual C要简单得多,调试也很方便。更重要的是系统把重要的东西都呈现给读者,使读者更能掌握其中的本质。 用一条一条的汇编语言指令很难写出大程序,Windows汇编语言程序也是调用系统提供的API来写程序。因而,用Windows汇编语言同样可写出大程序。以下是一个最简单的Windows程序。 ;程序功能:显示一个信息框。 ;ex1.asm(e:\masm\base) ;程序名 ;编译链接方法: ;ml /c /coff ex1.asm ;link /subsystem:console ex1.obj .386 ;指明指令集 .model flat,stdcall ;程序工作模式,flat为Windows程序使用的模式(代码和数据 ;使用同一个4GB段),stdcall为API调用时右边的参数先入栈option casemap:none ;指明大小写敏感 include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib .data ;数据段 szCaption db '抬头串',0 szText db 'Hello!',0 .code ;代码段 start:

汇编语言,led点亮

《单片机应用设计》课程设计 专业:自动化 姓名: 学号: 同组人员: 指导教师: 日期:

单片机应用设计课程设计 设计题目 1个按键:无按键时,8个LED全亮,按下1次,8个Led依次点亮,持续1S。连续按两次,8个Led以相反的次序依次点亮。

单片机应用设计课程设计 第一部分系统设计分析 硬件分析 1.LED灯采用共阳极接法,本题中则将P1口对应各位赋低电平即可点亮LED灯。 2.p 3.5接按键。 软件分析 第二部分硬件电路设计及实现

单片机应用设计课程设计 第三部分软件设计 ORG 0000H LJMP MAIN ;中断入口 ORG 000BH LJMP DIER KEY BIT P3^4 LED EQU P1 MAIN: MOV R2,#0 ;R2清零 MOV LED,#0 ;八个二极管全亮 MOV R3,#10 MOV TMOD,#01H;选择定时器0的定时器方式1 ;赋初值3CB0H即15536 MOV TL0,#0B0H MOV TH0,#3CH SETB EA ;打开总中断 SETB ET0 ;允许定时器0中断 ;第一次按键检测 KEY_SCAN:JNB KEY, YN1 ;为零则转移,即为按下 AJMP KEY_SCAN YN1:LCALL DEL1MS JNB KEY,Y1 ;判断是否真的按下,真的按下了,则转移 AJMP KEY_SCAN Y1:LCAL L DEL1MS JB KEY,SSH ;检测是否松手,松手转移 AJMP Y1 SSH:SETB TR0 ;打开定时器0 CJNE R2,#1,$ ;检测R2是否为一,不为一则等待 CLR TR0 ;关闭定时器 AJMP MAIN ;跳回主程序 ;第二次键盘检测,每50ms检测一次,检测10次,即为500ms DIER:JNB KEY, LED_2 ;检测键盘是否按下,按下则转移 DJNZ R3,CZ ;R3减一是否为零,不为零则转移 AJMP LED_1 ;延迟500ms后没有第二次按下,跳到LED_1 LED_1:MOV R4,#8 MOV A,#0FEH ;LED顺序循环程序 LOOP1:MOV LED,A LCALL DEL1S

微机实验一 汇编语言程序调试基础训练

实验一汇编语言程序调试基础训练 实验目的: 1、学习、掌握汇编程序的编辑、编译、链接的方法 2、学习常用的DEBUG命令,掌握汇编程序调试方法 3、通过调试程序,弄清汇编指令和机器码的关系 4、弄清代码段、数据段、堆栈段中的段地址和偏移量的形成 实验内容: 1、源程序的编辑 2、源程序的编译、链接 3、汇编程序调试,完成相关数据的记录和分析 实验步骤: 一、源程序的编辑、编译、链接 1、在E盘建立L8086文件夹,将L8086文件全部拷入该目录 2、用EDIT或写字板编辑器,将例程BBADD.ASM输入计算机,以 BBADD.ASM文件名保存程序 3、用MASM.EXE工具将源程序编译成BBADD.OBJ文件 4、用LINK.EXE工具将目标文件链接成BBADD.EXE可执行文件 二、程序载入和退出 1、进入DOS命令提示符界面 2、将路径切换至:E>L8086> 3、输入DEBUG BBADD.EXE 回车,此时程序载入到DEBUG调试 状态 4、按Q回车,则退出调试状态返回到操作系统 三、程序的调试 1、在DEBUG调试状态,输入U回车,显示

此时可以看到源程序经编译后,载入到计算机内存中每一条指令所对应的机器码;可以看到指令在代码段中所处的段地址和偏移量等信息。对照源程序填写以下信息: 程序起始地址:[ :] 程序结尾地址:[ :] 用户数据段地址:[ ] 变量R0分得的地址:[ ] 变量R2分得的地址:[ ] 变量R3分得的地址:[ ] 变量R4分得的地址:[ ] 以上信息说明:U命令可以显示反汇编信息 2、输入R回车,显示以下的信息: 这是CPU内所有寄存器信息,注意观察和记录 (1)段地址信息:CS= DS= SS= ES= (2)通用寄存器信息: AX= BX= CX= DX= SI= DI= BP=

汇编语言小程序

16进制转化为10进制STACK SEGMENT STACK'STACK' DW100H DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT KEYBUFFER DB100 ;DB ? ;DB 100 DUP(?) DECIMAL DB 5 DUP(?) STRING1 DB'PLEASE INPUT DECIMAL DATA:$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,CS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV SS,AX LEA SP,TOP LEA DX,STRING1 MOV AH,09H INT 21H MOV AH,0AH LEA DX,KEYBUFFER ;MOV AX,23456 INT 21H ;LEA SI,KEYBUFFER MOV AX,DX LEA DI,DECIMAL CALL DISPAX MOV AH,4CH MOV AL,0 INT 21H DISPAX PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI LEA DI,DECIMAL

CALL TRANS16TO10 MOV CX,5 LEA DI,DECIMAL+4 MOV AH,2 DISPAXD: MOV DL,[DI] ADD DL,30H DEC DI INT 21H LOOP DISPAXD POP DI POP DX POP CX POP BX POP AX RET DISPAX ENDP TRANS16TO10 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV BX,10 MOV CX,5 LOOP1: XOR DX,DX DIV BX MOV[DI],DX INC DI LOOP LOOP1 LEA DX,DECIMAL MOV AH,09H INT 21H POP DI POP DX POP CX POP BX POP AX RET TRANS16TO10 ENDP

汇编语言小程序记录鼠标路径

;TITLE DRAW--Program to draw on screen with ;cursor arrows,character write to video memory ;------------------------------------------------------------------------ read_c equ0h;read character word key_rom equ16h;rom keyboard routine up equ48h;scan code for up arrow down equ50h;scan code for down arrow right equ4dh;scan code for right arrow left equ4bh;scan code for left arrow block equ01h;solid graphics character quit equ1bh;escape key ;************************************************************************* video segment at0b800h;define extra seg wd_buff label w ord v_buff db25*80*2 dup (?) video ends ;************************************************************************* pro_nam segment;define code segment ;------------------------------------------------------------------------ main proc far;main part of program assume cs:pro_nam,es:video ;set up stack for return start:push d s;save ds sub ax,ax;set ax to zero push a x;put it on stack ;set es to extra segment mov ax,video mov es,ax ;clear screen by writing zeros to it ;even bytes get 0(characters) ;odd bytes get 7(normal"attribute") mov cx,80*25 mov bx,0 clear:mov es:[wd_buff+bx],0700h inc bx;increase pointer inc bx;twice loop clear;do again ;screen pointer will be in cx register ;row nuber(0 to 24 d)in ch ;column nuber(0 to 79d)in cl ;set screen pointer to center of screen mov ch,12d;row divide by 2 mov cl,40d;column divide by2

实验一基础汇编语言程序设计

实验一基础汇编语言程序设计 实验目的 1.学习和了解TEC-XP十六位机监控命令的用法; 2.学习和了解TEC-XP十六位机的指令系统; 3.学习简单的TEC-XP十六位机汇编程序设计。 实验内容 1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容; 2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。 3.学习联机使用TEC-XP教学试验系统和仿真终端软件。 实验要求 在使用该教学机之前,应先熟悉教学机的各个组成部分及其使用方法。 实验步骤 1.关闭电源,将大板上的COMl口与PC机的串口相连; 2.接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口为“l”或“2”,其它的设置一般不用改动,直接回车即可; 3.置控制开关为001110(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意。其它实验相同; 4.按一下“RESET”按键,再按一下“START”’按键,主机上显示: 5.用R命令查看寄存器内容或修改寄存器的内容 1.用R命令查看寄存器或修改寄存器内容 1)在命令行提示符状态下输入: R↙;显示寄存器的内容 注:寄存器的内容在运行程序或执行命令后会发生变化。

2)在命令行提示符状态下输入: R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格, 也可有—个或数个空格 主机显示: 寄存器原值:xxxx 在后面输入新的值0036 再用R命令显示寄存器内容,则R0的内容变为0036。 2.用D命令显示存储器内容 在命令行提示符状态下输入: D 2000↙ 会显示从2000H地址开始的连续128个字的内容; 连续使用不带参数的D命令,起始地址会自动加128(即80H)。

汇编语言菜单系统

实训一光标漫游 ⒈问题 在25行80列的显示屏内,通过按键“→、←、↑、↓”来改变光标的位置,如按“→”键则光标往右侧走一列,按“↑”键则光标往上走一行的位置,最终通过“Esc”结束程序。 ⒉边界问题 要处理好特殊情况:①光标在第一行,再按“↑”键时;②光标在第一列,再按“←”键时;③光标在第25行,再按“↓”键时;④光标在第80列,再按“→”键时。 ⒊边界问题处理 采用折返的方式:①光标在第1行,再按“↑”键时进到第25行;②光标在第1列,再按“←”键时进到第80行;③光标在第25行,再按“↓”键时进到第1行;④光标在第80列,再按“→”键时时进到第1列。 ⒋实验基础 ①读键:用int 16h的0号功能调用 掌握扫描码和字符码的区别 Mov ah,0 Int 16h ;返回AH=扫描码,AL=字符码 ②定位光标:用int 10h的2号 ③清屏:用int 10h的6号(或7号)功能调用 MOV AH,6 MOV BH,04h

MOV AL,0 MOV CX,0 MOV DX,184fh INT 10h ④相关键的扫描码和字符码 EnterKey EQU 1c0dh EscKey EQU 010bh UpCursor EQU 4800h LeftCursor EQU 4b00h RightCursor EQU 4d00h DownCursor EQU 5000h 5.算法 do { 定位光标 读键 if (al==特殊键) { if (ah==左光标键) 修正列值} else if (ah==右光标键) {修正列值} else if (ah==上光标键) {修正行值} else if (ah==下光标键) {修正行值} } } while (al!=Esc) 6.实验步骤 运行“光标漫游示例.EXE”了解需求。 ①编一小程序获得特殊键“→、←、↑、↓”“Esc、回车”等的扫描码和Asc码值,并记录以备后用;

汇编经典小程序

实验一:判断一个数X的正,负数,还是零。(假设是正数,输出+,是负数,输出-,是零,输出This is a zore !) DATA SEGMENT X DB 10 CR EQU 0DH LF EQU 0AH W DB 'This is a zore!',CR,LF,'$' ZHENG DB '+',CR,LF,'$' FU DB '-',CR,LF,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,X AND AL,AL JZ L1 SHL AL,1 JC L3 JMP L2 L1: MOV DX,OFFSET W MOV AH,9 INT 21H JMP L4 L2: MOV DX,OFFSET ZHENG MOV AH,9 INT 21H JMP L4 L3: MOV DX,OFFSET FU MOV AH,9 INT 21H JMP L4 L4: MOV AH,4CH INT 21H CODE ENDS END START 实验二:求十个数中的最小数,并以十进制输出。(若要求最大的,只要把JC 改为JNC 即可)(仅局限于0---16间的数比较,因为ADD AL,30H只是针对一位的十六进制转换十进制的算法) DATA SEGMENT XDAT DB 0AH,1FH,02H,03H,04H,05H,06H,07H,08H,09H MIN DB ? CR EQU 0DH

W DB ' is min',CR,LF,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,9 MOV SI,OFFSET XDAT MOV AL,[SI] L2: CMP AL,[SI+1] JC L1 MOV AL,[SI+1] L1: INC SI LOOP L2 ADD AL,30H MOV DL,AL MOV AH,2 INT 21H MOV DX,OFFSET W MOV AH,9 INT 21H CODE ENDS END START 实验三:设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将它们从大到小从新排列的程序。 DATA SEGMENT BUF DB 87,234,123 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF MOV AL,[SI] ;把3个数取到寄存器中 MOV BL,[SI+1] MOV CL,[SI+2] CMP AL,BL ;排序,将最大数送AL寄存器 JAE NEXT1 XCHG AL,BL NEXT1:CMP AL,CL JAE NEXT2 XCHG AL,CL NEXT2:CMP BL,CL ;将最小输送CL寄存器

汇编语言程序设计

《汇编语言程序设计》课程教学大纲 学时:32 学分:2 理论学时:24 实验学时:8 面向专业:电科、电信、通信课程代码:B2700009 先开课程:C语言程序设计课程性质:必修 执笔人:王艳春审定人:陈龙猛、张金政 第一部分:理论教学部分 一、说明 1、课程的性质、地位和任务 本课程属于专业基础课,是电科、电信和通信专业学生必修的核心课程之一,是进一步学习微机原理、操作系统等课程的基础。掌握它有助于提高学生对计算机系统的设计、研究、开发和应用能力。汇编语言是一种面向机器、实践性很强的程序设计语言,必须结合一种实际的计算机来组织教学。因此,本课程选择最广泛使用的IBM PC作为具体的机型来介绍。通过课堂教学和上机实践,培养学生用汇编语言进行编程的思路、方法,养成良好的程序设计习惯,并了解底层I/O 驱动软件的编程方法,熟悉源程序汇编、链接和调试运行的步骤和方法,掌握dos、BIOS功能的调用方法及使用debug工具的调试手段,为后续课的学习打下扎实的基础。 2、课程教学和教改基本要求 课程的目的与教学基本要求:本课程主要介绍汇编语言和宏汇编的基本概念,80X86CPU的指令系统和寻址方式;介绍汇编语言程序格式、伪操作和上机全过程。通过实际例子,详细叙述顺序、分支、循环、子程序等基本程序结构以及程序设计的基本方法和技巧。学习这门课程,应达到以下几个要求: ①掌握汇编语言的基本理论知识和有关概念;掌握用汇编语言编写源程序的基本原则、方法和技巧; ②具有阅读,分析汇编语言程序的能力; ③通过上机实践,能够熟练地掌握汇编语言程序的编辑、汇编、连接、运行 过程及debug工具的调试手段。

汇编语言程序设计复习.doc

知识点 第一章基础知识 (1)正负数的补码表示, 掌握计算机中数和字符的表示; eg.假设机器字长为8位,[+3]补=00000011B,[-3]补= 11111101 H 。 十六进制数0FFF8H表示的十进制正数为65528D,表示的十进制负数为-8D。 8位二进制数被看成是带符号补码整数时,其最小值是-128,最大值是 127 。 第二章80x86计算机组织 (1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器 eg: IP寄存器中保存的是?代码段中的偏移地址FLAGS标志寄存器中共有几位条件状态位6位,有几位控制状态位2位,标志寄存器分为哪2类?陷阱标志,中断标志。 (2)存储单元的地址和内容每一个字节单元给以一个唯一的存储器地址,称为物理地址;一个存储单元中存放的信息称为该存储单元的内容。存储器地址的分段,(低位字节存放)低地址,(高位字节存放)高地址;实模式下逻辑地址、选择器和偏移地址;物理地址的表示段基地址加上偏移地址。 eg.如果SS=6000H,说明堆栈段起始物理地址是_____60000H___。 已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为__1420H______。 如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H . 第三章80x86的指令系统和寻址方式 与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址)。数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS 指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。eg.【习题3.8】假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,

汇编教程汇编语言编程实例

汇编语言编程实例一这一章,我们要把我们已学的知识集合起来。具体来讲,我们来写一个使用ODBC APIs的程序.为简单起见,这个程序中我使用Microsoft的Access数据库(Microso ft Access 97) . 注意:如果你使用的windows.inc 是1.18及其以下版本,在开始编译之前要修改其中的一个小bug.在windows.inc中查找 "SQL_NULL_HANDLE",将得到下面这行: SQL_NULL_HANDLE equ 0L 将0后面的"L"删除,象这样: SQL_NULL_HANDLE equ 0 这个程序是一个基于对话框的程序,有一个简单的菜单.当用户选择"connect"时,它将试图连接test.mdb数据库,如果连接成功,将显示由ODBC驱动程序返回的完整连接字符串.接下来,用户可选择"View All Records"命令,程序会使用listview control来显示数据库中的所有数据.用户还可以选择"Query"命令来查询特定的记录.例子程序将会显示一个小对话框提示用户输入想找的人名.当用户按下OK钮或回车键,程序将执行一个查询来查找符合条件的记录.当用户完成对数据库的操作时,可以选择"disconnect"命令与数据库断开连接. 现在看一下源程序: .386 .model flat,stdcall include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\odbc32.inc include \masm32\include\comctl32.inc include \masm32\include\user32.inc includelib \masm32\lib\odbc32.lib includelib \masm32\lib\comctl32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib IDD_MAINDLG equ 101 IDR_MAINMENU equ 102 IDC_DATALIST equ 1000 IDM_CONNECT equ 40001 IDM_DISCONNECT equ 40002 IDM_QUERY equ 40003 IDC_NAME equ 1000 IDC_OK equ 1001 IDC_CANCEL equ 1002 IDM_CUSTOMQUERY equ 40004 IDD_QUERYDLG equ 102 DlgProc proto hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

相关文档