1、若无错误,进行下一步。4、连接在dos提示符下输入命令“link 001.obj”。5、运行在dos提示符下输入命令“001”,发现屏幕上输出“This is a sample program!”,实验完成。 实验二 DEBUG的应用1、进入和退出DEBUG程序2、使用DEBUG中的常用命令1、熟悉DEBUG有关命令的使用方法2、学会利用DEBUG掌握有关指令的功能3、学会利用DEBUG运行简单的程序段1、debug的启动与退出在dos提示符下输入“debug”,并回车,可进入debug状态;在debug提示符下输入“q”,可返回dos提示符。2、用R命令查看、改变CPU寄存器的内容输入“r”
2、,回车,可看到CPU内部所有寄存器内容和标志位状态;输入“R AX”,可显示AX的值,并将AX的值修改为1234H;3、汇编命令A在debug提示符下,输入“A 100”,输入几条汇编指令。MOV AL,0CADD AL,1EADC AL,304、单步执行命令T先输入命令“T=0”,然后每次都输入命令“T”,查看输入的每条指令执行后的状态。5、调试应用程序debug 001.exe6、反汇编指令U在debug提示符下,输入“U”指令,显示001.exe的汇编指令。5、运行命令G输入命令“G”,运行001.exe中的所有指令;输入命令“G=13f0:0 d”,运行指定区域内的指令。7、显示内存单
3、元命令D输入“D 1389:0100”,显示1389H:0100H单元为首的内存区域中存放的内容。8、修改内在单元命令E输入“E 1389:0100”,将0100H单元的内容修改为FFH。实验三 顺序结构程序设计将两个2字节长的二进制数相加,运算结果存放在相应结果单元中。掌握汇编语言的顺序结构程序设计方法。1、流程框图2、源程序DATA1 DB 1, 2 ;被加数 DATA2 DB 5, 6 ;加数DATA3 DB 0, 0 ;和 CODE, DS: MOV AX, DATA MOV DS, AX MOV SI, 0 CLC ;清进位标志 MOV AL, DATA1SI ADC AL, DAT
4、A2SI ;第一个字节相加 MOV DATA3SI, AL INC SI第二个字节相加 ;. 输出显示部分 . MOV BX, OFFSET DATA3 MOV DL, BX ADD DL, 30H MOV AH, 2 INT 21H INC BX;. 输出显示结束 . MOV AH, 4CH INT 21H ;返回 DOS CODE ENDS实验四 分支结构程序设计接收键盘输入字符,将其中的小写字母转换为大写字母。学会汇编语言的分支结构程序设计方法。 MSG DB ERROR!, 0DH, 0AH,$ MOV AH, 1读入一字符送入AL CMP AL, a JB ERR ;不是小写字母转出
5、错处理 CMP AL, z JA ERR ; SUB AL, 32 ;转换成大写字母后送到AL MOV DL, AL MOV AH, 02输出转换后的字符OVER:返回DOSERR: MOV DX, OFFSET MSG MOV AH, 09 JMP OVER实验五 循环结构程序设计统计一个有10人的班中,男、女生的人数各为多少。将统计结果的男生人数存入变量 BOY中,女生人数存入变量GIRL中。掌握汇编语言的循环结构基本设计方法。1流程框图2.参考程序 BOY DB 0 ;存放男生人数 GIRL DB 0 ;存放女生人数 COUNT EQU 10 ;班里的总人数 DISP DB 0DH, 0
6、AH, BOY OR GIRL 1/0 ? , $ DISP1 DB 0DH, 0AH, BOY:, $ DISP2 DB 0DH, 0AH, GIRL:DATA ENDSCODE SEGMENT ASSUME CS: MOV DS, AX MOV CX, COUNTINPUT: MOV DX, OFFSET DISP MOV AH, 9 MOV AH, 1 INT 21H ;读入一个字符 CMP AL, 1 ;是男生? JZ BOYCOUNT CMP AL, 0 ;是女生? JZ GIRLCOUNT JMP INPUTBOYCOUNT: INC BOY ;男生人数加1 JMP LOOPNEX
7、TGIRLCOUNT: INC GIRL ;女生人数加1LOOPNEXT: LOOP INPUT MOV AH, 4CH实验六 子程序设计编写一个程序,将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程HEXAC实现,在转换过程中,通过子程序DISP实现显示。1、掌握汇编语言子程序的设计方法;2、掌握主程序与子程序之间的调用关系及调用方法。1、分析:该实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地
8、址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS值是不变的。BUF DB 0ABH,0CDH,0DEH,01H,02H,03HDB 3AH,4BH,5CH,6FH ASSUME CS:CODE,DS:START: MOV AX,DATA MOV DS,AX MOV CX,10 LEA BX,BUFAGAIN: MOV AL,BX CALL HEXASC LOOP AGAIN MOV AH,4CHHEXASC PROC NEARMOV DL,ALPUSH CXMOV CL,4SHR DL,CLPOP CXCALL DISP ;显示高位HEX数AND DL,0FHCALL DISPR
9、ETHEXASC ENDPDISP PROP CMP DL,9 JBE NEXT ADD DL,7NEXT: ADD DL,30H MOV AH,2显示 RET DISP ENDP实验七 综合程序设计设计并实现一个小型应用实例,要求:1、接收从键盘输入的一个班的学生成绩,存放于50字的grade数组中,其中grade+i保存学号为i+1的学生成绩。2、根据grade中学生成绩,把学生名次填入50字的rank数组中,其中rank+i的内容是学号为i+1学生的名次。3、最后按学号顺序把名次从终端显示出来。熟练掌握三种基本结构程序设计、掌握结构化程序设计方法,并能综合运用,从而培养学生综合分析问题和
10、解决问题的能力。1、在该应用实例中,包括三个方面的内容:一成绩输入;二计算名次;三是排序输出。每一部分可对应一段子程序,程序结构是一个较为典型的层次结构,如下图: 程序MAIN 功能:根据输入的学生成绩,计算并显示出学生名次。 程序INPUT接收一个班级学生的成绩,各成绩之间用空格隔开。 程序RANKP计算一个班级学生的名次。(可参照循环程序(一)中的程序段) 程序OUTPUT输出(显示)一个班级的学生名次 程序DECIBIN十进制转换二进制,存入BX 程序BINDEC十进制转换二进制,并在屏幕上显示。 程序DEC_DIV功能:BX的内容除以CX的内容,并在屏幕上显示一位商。2、程序框图:3、
11、源程序模块名:main.ASM 总控模块EXTRN INPUT:FAREXTRN RANKP:EXTRN OUTPUT:ASSUME CS:CODECALL FAR PTR INPUT CALL FAR PTR RANKP CALL FAR PTR OUTPUT MOV AH,4CHINPUT.ASM 输入模块PUBLIC INPUTPUBLIC GRADEPUBLIC COUNT DATA SEGMENT PUBLICGRADE DW 50 DUP(?)COUNT DW ?MESS1 DB GRADE?INPUT PROC FARMOV AX,DATAMOV DS,AXLEA DX,MESS
12、1MOV AH,09INT 21HMOV SI,0ENTER:CALL DECIBININC COUNTCMP DL,JZ STORECMP DL,13JZ EXITSTORE:MOV GRADESI,BXADD SI,2JMP ENTEREXIT:MOV DL,0AHMOV AH,02HDECIBIN PROC NEAR MOV BX,0NEWCHAR: MOV AH,1 MOV DL,AL SUB AL,30H JL EXIT1 CMP AL,9D JG EXIT1 CBW XCHG AX,BX MOV CX,10 MUL CX ADD BX,AX JMP NEWCHAR EXIT1: D
13、ECIBIN ENDPINPUT ENDP END RANKP.ASM 学生成绩名次计算模块EXTRN GRADE:WORDEXTRN COUNT:PUBLIC RANKPPUBLIC RANKRANK DW 50 DUP(?RANKP PROC FARMOV DX,COUNTMOV BX,0LOOP1:MOV AX,GRADEBXMOV RANKBX,0MOV CX,COUNTLEA SI,GRADENEXT:CMP AX,SIJG NO_COUNTINC RANKBXNO_COUNT:LOOP NEXTADD BX,2DEC DXJNE LOOP1RANKP ENDPOUTPUT.ASM
14、输出模块EXTRN RANK:PUBLIC OUTPUTMESS2 DB RANK :OUTPUT PROC FAR LEA DX,MESS2 MOV AH,09H MOV SI,0 MOV DI,COUNT NEXT1: MOV BX,RANKSI CALL BINIDEC MOV DL, MOV AH,02 ADD SI,2 DEC DI JNZ NEXT1 RETBINIDEC PROC NEAR PUSH BX PUSH CX; MOV CX,100 ; CALL DEC_DIV MOV CX,1 POP CX POP BXBINIDEC ENDPDEC_DIV PROC MOV AX,BX MOV DX,0 DIV CX MOV BX,DX ADD DL,30H MOV AH,02HDEC_DIV ENDPOUTPUT ENDP END
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2