首页 汇编语言实验

汇编语言实验

举报
开通vip

汇编语言实验实验一 DEBUG命令实验 一.实验目的: 掌握DEBUG 的基本命令及其功能 二.实验内容: DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 1、DEBUG的主要命令 (1) 汇编命令A,格式为:-A[地址]; 该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。 例如: -a 136B:0100 mov ax,100 136B:0103 mov bx,200 136B:0106 mov cx,3001...

汇编语言实验
实验一 DEBUG命令实验 一.实验目的: 掌握DEBUG 的基本命令及其功能 二.实验内容: DEBUG是专门为汇编语言 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 1、DEBUG的主要命令 (1) 汇编命令A,格式为:-A[地址]; 该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。 例如: -a 136B:0100 mov ax,100 136B:0103 mov bx,200 136B:0106 mov cx,300136B:0109 mov dx,400 136B:010C - (2) 反汇编命令U,有两种格式: 1)-U[地址] 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。 例如: -u 2)-U范围 该命令对指定范围的内存单元进行反汇编, 例如: (3) 运行命令G,格式为: -G [=地址1][地址2[地址3。。。]] 其中地址1规定了运行起始地址,后面的若干地址均为断点地址。 例如: (4) 追踪命令T,有两种格式: 1)逐条指令追踪:-T[=地址];该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。 2)多条指令追踪:-T[=地址][值],该命令从指定地址起执行n条命令后停下来,n由[值]确定。 (5) 显示内存单元内容的命令D,格式为:-D[地址]或-D[范围] (6) 修改内存单元内容的命令E,它有两种格式: 1)用给定的内容代替指定范围的单元内容:-E地址  内容 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 例如:-E 2000:0100  F3 “XYZ” 8D 其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元049e:0005到0008的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。 2)逐个单元相继地修改:-E地址 例如: 此命令是将原5号单元的内容f3改为89>89是程序员键入的。 (7) 检查和修改寄存器内容的命令R,它有三种方式: 1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R R命令显示中标志位状态的含义如下表所示: 标 志 名 置 位 复 位 溢出Overflow(是/否) OV NV 方向Direction(减量/增量) DN UP 中断Interrupt(允许/屏蔽) EI DI 符号Sign(负/正) NG PL 零Zero(是/否) ZR NZ 辅助进位Auxiliary Carry(是/否) AC NA 奇偶Parity(偶/奇) PE PO 进位Carry(是/否) CY NC       2)显示和修改某个指定寄存器内容,格式为: -R 寄存器名 例如打入:-R AX 表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如: -R BX BX 0369 :059F 则BX内容由0369改为059F 3)显示和修改标志位状态,命令格式为: -RF 系统将给出响应,如 OV DN EI NG ZR AC PE CY- 这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如 OV DN EI NG ZR AC PE CY-PONZDINV 三 、实验任务 1. 参照附录1,掌握DEBUG程序的各种命令,重点是命令R,D ,A,U,T,P,G命令的使用。 2. 用命令A汇编下列指令,判断指令正误并说明原因。 (1) ROR AX,8 (2) LEA DI,[AX] (3) MOV DS,2010 (4) PUSH AL (5) OUT 900,AL (6) MOV [BX],0 3. 用命令查看8086/8088 CPU在开机后执行的第一条指令。 4. 用命令D查看DS:200~22F和F000:200~22F两内存块内容,用命令F将字符“A”分别填入这两个内存块,比较填入前后结果,了解可读写内存RAM和只读内存ROM的区别。 5. 用A命令汇编一条INT 1C指令,用命令T单步执行该指令,比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况,了解什么是中断向量表,中断向量和中断子程,掌握中断指令的执行过程。 6. 利用T,P,G命令,执行下列指令段,注意它们的不同之处。 (1) MOV DI,300 MOV SI,400 MOV CX,3 CLD REP MOVSB INT 3 (2) MOV AH,2 MOV DL,41 INT 21 INT 3 (3) 先在CS:200处汇编一条RET指令,再在CS:100处汇编。 MOV BX,200 CALL BX INT 3 然后从MOV BX,200处开始执行。 实验三 分支程序实验 一、实验目的 1)掌握分支程序的设计方法。 2)掌握利用DEBUG修改参数、检查结果的方法。 3)掌握汇编语言源程序的编辑、汇编、连接及调试过程。 二、实验内容 1)编写一个程序,显示AL寄存器中的两位十六进制数 2)编写一个程序,判别键盘上输入的字符;若是0-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。 1)显示AL中两位十六进制数程序: ;DISPHEX.ASM CODE SEGMENT ASSUME CS:CODE START: MOV AL,3EH  0011 1110 MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL    逻辑右移4位,dl= 0000 0011 CMP DL,9  比较 JBE NEXT1  小于等于 ADD DL,7 NEXT1: ADD DL,30H    0000 0011+0011 0000 dl=33h MOV AH,2  ah=0000 0010 INT 21H                  ;显示高位ASCII码 MOV DL,BL AND DL,0FH    0eh CMP DL,9 JBE NEXT2 ADD DL,7  NEXT2: ADD DL,30H MOV AH,2 INT 21H                  ;显示低位ASCII码 MOV AH,4CH INT 21H CODE ENDS ;返回DOS END START 2)显示键入字符程序 ;DISPKEY.ASM CODE SEGMENT ASSUME CS:CODE START: MOV AH,1    ;1号功能调用 INT 21H    ;等待键入字符,送AL CMP AL,0DH    ;是否是回车符? JZ DONE    ;是则转DONE退出程序 CMP AL,’0’ JA NEXT CMP AL,’9’ JB CHARUP MOV DL,AL MOV AH,2 INT 21H                    ;显示0~9 JMP START CHARUP: CMP AL,41H JA NEXT CMP AL,5AH JB CHRDN DISPC: MOV DL,’C’ MOV AH,2 INT 21H NEXT: JMP START CHRDN: CMP AL,61H JB NEXT CMP AL,7AH JA NEXT JMP DISPC DONE: MOV AH,4CH INT 21H                      ;返回DOS CODE: ENDS END START  首先运行程序: 对程序进行但不执行,了解程序的运行过程: 程序流图: 实验四 循环程序实验 一、实验目的: 1)掌握循环程序的设计方法 2)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。 3)学会针对不同的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,选用不同的组织循环的方法。 二、实验内容 1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。统计结果存于N单元中。 2)存储单元DAT1及DAT2中各有10字节的二进制数,高位字节放在高位地址中。试编写一程序将这两个数据相加,结果存放在从DAT3开始的单元中。 1)偶校验程序清单: ;EX56.ASM DESG SEGMENT STRN DB ‘ASCDEfghijkLMNOPQuvw’,‘$’ N DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX LEA SI, STRN MOV DL, 0 AGAIN: MOV AL, [SI] CMP AL, ‘$’ JE DONE TEST AL, 0FFH JPE NEXT OR AL, 80H MOV [SI], AL INC DL NEXT: INC SI JMP AGAIN DONE: MOV N, DL MOV AH, 4CH INT 21H CSEG ENDS END START ;以上是条件控制的循环。因为事先不知道字符串STRN共有多少字符,故采用条件控制的循环程序实现。 可以看出,有十个字符进行了偶校验 2)加法程序清单: ;ADDHEX.ASM CODE SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, CS MOV DS, AX LEA SI, DAT1 LEA DI, DAT2 LEA BX, DAT3 MOV CX, 10 XOR AL, AL ;0→CF AGAIN: MOV AL, [SI] ADC AL, [DI] MOV [BX], AL INC SI INC DI INC BX LOOP AGAIN MOV AH, 4CH INT 21H DAT1 DB 70H, 80H, 90H, A0H, A1H, A2H, A3H DB 74H, 65H, 56H DAT2 DB 45H, 67H, 89H, 1AH, 2BH, 3CH DB 4DH, 5EH, 6FH, 04H DAT3 DB 10 DUP(?) CODE ENDS END START ;本程序中,DS及CS同处一个逻辑段CODE中,所以,应将CS值送至DS中。 相当于计算 实验五 子程序实验(1) 一、实验目的 1)掌握主程序与子程序之间的调用关系及调用方法。 2)掌握子程序调用过程中近程调用与远程调用的区别。 3)掌握通过堆栈转送参数的方法。 二、实验内容 1)将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。在转换过程中,通过子程序DISP实现显示。 2)编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。 1)码型转换程序清单: ;CONV.ASM DATA SEGMENT BUF DB 0ABH,0CDH,0DEH,01H,02H,03H DB 3AH,4BH,5CH,6FH DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,10 LEA BX,BUF AGAIN: MOV AL, [BX] CALL HEXASC INC BX LOOP AGAIN MOV AH,4CH INT 21H HEXASC  PROC NEAR MOV DL,AL PUSH CX MOV CL,4 SHR DL,CL POP CX CALL DISP        ;显示高位HEX数 MOV DL,AL AND DL,0FH CALL DISP        ;显示低位HEX数 RET HEXASC  ENDP DISP    PROP CMP DL,9 JBE NEXT ADD DL,7 NEXT: ADD DL,30H          ;将一位HEX数转为ASCII码 MOV AH,2 INT 21H          ;显示 RET DISP ENDP CODE ENDS END START 2)统计并显示某键入字符的个数的程序: :COUNTER.ASM DATA  SEGMENT CHAR  DB ‘b’ BUF  DB 50H, ? 50H DUP(?) DATA  ENDS MCODE  SEGMENT ASSUME CS: MCODE, DS: DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,9 INT 21H LEA SI BUF MOV CL, [SI+1] MOV CH, 0          ;CX中为字符串长度 INC SI INC SI              ;SI指向串首址TABLE MOV AL,CHAR MOV AH,0            ;AX中为待查字符 PUSH SI PUSH CX PUSH AX            ; 参数送堆栈 CALL CHECK POP AX              ;统计个数在AL中 MOV DL,CHAR MOV AH,2 INT 21H            ;显示待检字符 MOV DL,AL AND DL, 0FH CMP DL,9 JBE NEXT ADD DL,7 NEXT: ADD DL,30H MOV AH,2 INT 21H            ;显示统计个数 MOV AH,4CH INT 21H MCODE  ENDS SCODE  SEGMENT ASSUME CS:SCODE CHECK  PROC FAR PUSH BP MOV BP,SP MOV SI,[BP+10] MOV CX,[BP+8] MOV AX,[BP+6] XOR AH,AH AGAIN: CMP AL,[SI] JNE NEXT1 INC AH NEXT1: INC SI LOOP AGAIN MOV AL,AH MOV [BP+10],AX POP BP RET .4 CHECK ENDP END START 实验六  子程序实验(2) 本实验目的在于使读者掌握模块间调用子程序的编写方法。 一、实验目的 (1)了解多模块程序设计方法。 (2)学会使用PUBLIC和EXTRN伪指令解决模块间的符号(如变量名、标号等)通信题。 二、实验内容 (1)编写一个子程序,将主程序敲定的内存中字符串的小宝字母转换成大写字母并显示出来。主程序用另一个模块编写。 (2)编写一个子程序,将主程序指定的字符所在的地址值返回给主程序,字符串与主程序在同一个模块。 (1)转换字符串小写字母为大写字母的程序清单: ;EXCHAR.ASM 为主模块的文件名 EXTRN    DNTOUP: FAR PUBLIC        STRING1, STRING2                    DATA        SEGMENT                            STRING1    DB 'This is a Book','$' STRING2    DB 80 DUP (?) DATA        ENDS CODE        SEGMENT                            ASSUME CS: CODE, DS: DATA START:        MOV    AX, DATA                    MOV    DS, AX                            CALL    DNTOUP                        MOV AH, 4CH INT    21H CODE      ENDS END    START ;DNTOUP.ASM为子模块的文件名 PUBLIC      DNTOUP                            EXTRN        STRING1: BYTE, STRING2: BYTE        CODE        SEGMENT ASSUME     CS: CODE DNTOUP    PROC    FAR MOV    BX,0 CYCLE:        MOV    AL, STRING1 [BX] CMP    AL,24H                            ;是否是STRING1结尾 JZ    DONE                                ;是“$”,转DONE CMP    AL,61H                            ;是否是小写字母 JB    NEXT                                ;不是转NEXT CMP    AL, 7AH JA    NEXT SUB    AL,20H                                ;转为大写字母 NEXT:        MOV    STRING2 [BX],AL INC    BX JMP    CYCLE DONE:        MOV    AL,'$' MOV    STRING2[BX],AL                    ;补一个$ MOV    DL, 0DH MOV    AH, 2 INT    21H                                MOV    DL, 0AH MOV    AH, 2 INT    21H                                    ;显示回车。换行    LEA    DX, STRING1 MOV    AH, 9 INT    21H                                    ;显示源串内容 MOV    DL, 0DH MOV    AH, 2 INT    21H MOV    DL, 0AH MOV    AH, 2 INT    21H                                    ;回车换行            MOV    DX, OFFSET STRING2 MOV    AH,9 INT    21H                                    ;显示转换后的大写串 RET DNTOUP    ENDP CODE        ENDS END (2)查找指定字符,并返回地址值的程序清单: ;MAINP.ASM为主模块程序名 EXTRN    FINDC: FAR PUBLIC    STRN                                    DATA    SEGMENT                                STRN    DB 'LINK DISPLAY SUBROUNTINE $' ADDR    DW ? DATA    ENDS CODE    SEGMENT                                ASSUME    CS: CODE, DS: DATA    START:    MOV    AX, DATA MOV    DS, AX                                MOV    AH, 1                                INT 21H CALL    FINDC                    MOV    ADDR, DI MOV    AH, 4H INT 21H CODE    ENDS END    START ;FINDC.ASM为子模块程序名 PUBLIC    FINDC EXTRN    STRN:BYTE CODE    SEGMENT LEA        DI, STRN                                AGAIN:    CMP BYTE PRT [DI],'$' JZ    DONE                                    CMP  AL, [DI]                                JNZ    NEXT                                    DONE1:    RET NEXT:    INC    DI                                    JMP    AGAIN                                    DONE:    MOV    DI, 0FFFFH                        ;找不到返回0FFFFH JMP    DONE1 FINDC    ENDP CODE    ENDS END 得不到返回的地址值,修改主程序; code        segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov ah,1 int 21h call findc mov adddr,di ;改名 mov dl,0ah ;显示回车 mov ah,2 int 21h mov dl,0dh int 21h mov dx,di mov ch,4    ;显示4位 mov cl,4 lop:    rol dx,cl push dx and dl,0fh cmp dl,9 jbe skip add dl,7 skip:    add dl,30h int 21h pop dx dec ch jnz lop mov dl, ‘h’      ;显示h int 21h mov ah,4ch int 21h code        ends end start (3)若由键盘输入字符串,则可在程序1的主模块的DATA段中加一行提示信息IMAGE: IMAGE    DB ’INPUT A STRING PLEASE:$’ 然后在主模块的CALL指令前插入以下程序段: LEA  DX, IMAGE MOV    AH,9 INT        21H LEA        DX,STRING2+1 MOV    AH,0AH INT    21H                      ;将键入串存入STRING2 LEA    SI,STRING2+2 MOV    CL,STRING2+1 MOV    CH,0 LEA    DI,STRING1 AGAIN  MOV AL , [SI] MOV  [DI],AL INC SI INC DI LOOP AGAIN MOV BYTE PTR[DI],'$'    ;补一个$ 说明:此处先将键入存入STRING2,然后再将其部分传送到STRING1中。当然 在定义STRING2时,应为:STRING2 DB 80,? 80DUP(?)。
本文档为【汇编语言实验】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_014457
暂无简介~
格式:doc
大小:178KB
软件:Word
页数:0
分类:
上传时间:2019-08-06
浏览量:15