汇编语言 实验

上传人:206****923 文档编号:37682036 上传时间:2018-04-20 格式:DOC 页数:7 大小:106.02KB
返回 下载 相关 举报
汇编语言 实验_第1页
第1页 / 共7页
汇编语言 实验_第2页
第2页 / 共7页
汇编语言 实验_第3页
第3页 / 共7页
汇编语言 实验_第4页
第4页 / 共7页
汇编语言 实验_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《汇编语言 实验》由会员分享,可在线阅读,更多相关《汇编语言 实验(7页珍藏版)》请在金锄头文库上搜索。

1、汇编语言程序设计 实验二 MASM 汇编器使用学号: 姓名:1.使用 MASM 为 DOS 和 Windows 编程: a)DOS 中运行的程序:先输入程序,.386.model flat, stdcalloption casemap :noneinclude masm32includewindows.incinclude masm32includekernel32.incinclude masm32includemasm32.incincludelib masm32libkernel32.libincludelib masm32libmasm32.lib.dataHelloWorld db

2、“Hello World!“, 0.codestart:invoke StdOut, addr HelloWorldinvoke ExitProcess, 0end start再打开 DOS 命令提示符界面,输入“masm32binml /c /Zd /coff hello.asm” 在没错误情况下,可以连接文件,输入“masm32binLink /SUBSYSTEM:CONSOLE hello.obj“,在工作目录中会产生可运行文件Hello.exe,运行并记录运行结果。b)Windows 中运行的程序:先修改程序,.386.model flat, stdcalloption casemap

3、 :noneinclude masm32includewindows.incinclude masm32includekernel32.incinclude masm32includeuser32.incincludelib masm32libkernel32.libincludelib masm32libuser32.lib.dataHelloWorld db “Hello World!“, 0.codestart:invoke MessageBox, NULL, addr HelloWorld, addr HelloWorld, MB_OKinvoke ExitProcess, 0end

4、start用命令“masm32binml /c /Zd /coff hellow.asm”编译程序,再用命令“masm32binLink /SUBSYSTEM:WINDOWS hellow.obj”连接程序,运行并记录运行结果。2.使用 Debug 调试编辑执行汇编代码的步骤: a)使用文本编辑器(如:Notepad) ,编辑汇编程序,并将程序在工作子目录中,保 存为以“.asm”为后缀的文件中。 b)打开 DOS 命令提示符界面,在工作子目录下输入“ml .asm”命令, 产生“.exe”可执行文件。注意,过程中“.obj”文件也会产生,如果汇编程序中 有过多出错指令, “.exe”文件就不

5、会产生。 c)使用“debut .exe”执行并 debug 程序。3.程序模板:DATA_HERESEGMENTDATA_A DW 1 DUP(0) ; 在数据段中预留位置DATA_B DW 1 DUP(0) ; 预留另一个位置; 预留位置的初始值都是 0HDATA_HEREENDSSTACK_HERESEGMENTSTACKDW 100 DUP(0); 内存中堆栈位置TOP_STACK LABEL WORD; 栈顶位置命名STACK_HERE ENDSCODE_HERE SEGMENTASSUME CS:CODE_HERE, DS:DATA_HERE, SS:STACK_HERESTART

6、: MOVAX, DATA_HEREMOVDS, AX ; DS 寄存器初始化MOVAX, STACK_HEREMOVSS, AX ; SS 寄存器初始化MOVSP, OFFSET TOP_STACK ;初始化堆栈指针; 在此顺序输入程序指令;INT 3H ; 断点CODE_HERE ENDSEND START4.解析 Intel x86 指令: a)将模板程序复制为 part_a.asm b)将表 1 中的代码复制到程序中 c)生成“part_a.exe”并 debug 这个程序 d)使用“-u”分解程序 e)填表解释每条指令 f)回答问题: i.将表格 1 空白处填满 ii.一些指令不包括

7、 ModR/M 字节,指出这些指令 iii.解释段覆盖前缀字节,解释为什么指令 MOV DS:DI+0203H中,BX 不需要 前缀字节,而指令 MOV DS:BP+2H中,DX 需要前缀字节?表格 1指令指令段覆盖前缀段覆盖前缀 字节字节 (HEX)操作码操作码 (OP )ModRegr/m位移量位移量字节数字节数ADD AX, BXADC BX, ES:SI TEST AX, 0305HMOV DS:BP+2h, DXMOV DS:DI+0203H, BXAND AL, CHOR AH, 03HROL AX, CLJMP FINISH (JMP 跳向程序最后一条跳向程序最后一条 指令指令)

8、5使用汇编语言程序解方程是一件不容易的事情。一般使用计算机来求解, xxf都是编写汇编语言程序计算并查表求解复杂函数。下面表 2 是使用汇编语言求解的求解表的部分内容。 xxf表格 2X(十进制数)(十进制数)f(x) x 210(十进制数)(十进制数)f(x) x 210(十六进制数)(十六进制数)000000H110240400H2144805A8H3177406EEH420480800H5229008F2H6250809CCH将表 3 的空白处填满,再将程序 part_b_s.asm 缺失的部分补上,使程序可以按表 3 计算 f(x) +f(y)。表格 3x(十进制数)(十进制数)y(十

9、进制数)(十进制数)(f(x)+f(y)x210 (十进制数十进制数)(f(x)+f(y)x210 (十六进制数十六进制数)13256543; Filename: part_b_s.asm.MODEL SMALL.STACK 64.DATAORG 0006HDATA_T DW 0,1024,1448,1774,2048,2290,2508 ; 查表ORG 0026HDATA_X DW 1,2,6,4 ; x 的值ORG 0046HDATA_Y DW 3,5,5,3 ; y 的值ORG 0066HDATA_R DW 4 DUP(0) ; 结果ORG 0086HDATA_C DW 4 ; numb

10、er of results.CODEMAIN PROC FARMOV AX, DATA ; 载入数据段地址MOV DS, AXMOV CX, DATA_C ; 设置计数器MOV SI, OFFSET DATA_X ; SI: 指向第一个x值的指针MOV DI, _ ; DI: 指向第一个y值的指针eMOV BP, _; BP: 指向第一个结果值的指针;LOOP1: MOV AX, _ ; x 的值SAL AX, _ ; x * 2, 表中每项占两字节MOV BX, _ ; BX: 指向表的指针ADD BX, AX ; 在表中发现项MOV DX, _ ; f(x) DXMOV AX, _ ; y

11、 AXSAL AX, _ ; y * 2MOV BX, OFFSET DATA_T ; BX: 指向表的指针ADD BX, AX ; 在表中发现项ADD DX, BX ; f(x) + f(y) DXMOV _, DX ; 存储结果,需要覆盖DS的前缀ADD SI, 2H ; 修改指向x的指针ADD DI, _ ; 修改指向y的指针ADD BP, _ ; 修改指向结果的指针DEC _ ; 计数器减1_ LOOP1 ; 为完成跳回LOOP1标签位置INT 3H ; 中断点MAIN ENDPEND MAIN其中,现行词 ORG 用来标示地址偏移量的起始地址。在 MASM 汇编器中,由 ORG 定义

12、 的数据段内地址偏移量,实际是字节数加上一个固定的数值。6把程序“part_c.asm”中的缺失部分补上,这个程序用来计算两个 32-bit 无符号数之间 的乘法。使用两个 16-bit 无符号数之间乘法指令 MUL 计算:A*BC (算法示意图如 图 1 所示) 。图 1对程序进行汇编,并运行程序。将结果填入表 4。将可运行程序附在报告后面。MUL 指令 句法: MUL r/mem16 其中:r/mem16 操作数是 16-bit 寄存器或内存位置。结果 DX:AX=AX*r/mem16。 (DX 存 放结果的高 16-bit,AX 存放结果的低 16-bit)表格 4ABC=A*B编号编号

13、十六进制数十进制数十六进制数十进制数十六进制数十进制数13456789AFEDCBA982FFFFEEEE12345678333990041034; Filename: part_c_t.asm.MODEL SMALL.STACK 100.DATAMUL_CAND_L DW 1 DUP(0)MUL_CAND_H DW 1 DUP(0)MUL_LIER_L DW 1 DUP(0)MUL_LIER_H DW 1 DUP(0)PRODUCT_0 DW 1 DUP(0)PRODUCT_1 DW 1 DUP(0)PRODUCT_2 DW 1 DUP(0)PRODUCT_3 DW 1 DUP(0).COD

14、EMAIN PROC FARMOV AX, DATA ; 载入数据段地址MOV DS, AXMOV AX, MUL_CAND_L ; A_L AXMUL _ ; A_L * B_L DX, AXMOV CX, AX ; PROD_0 CXMOV BP, DX ; PROD_1 BPMOV AX, _ ; A_H AXMUL MUL_LIER_H ; A_H * B_H Dx, AXMOV DI, AX ; PROD_2 DIMOV SI, DX ; PROD_3 SIMOV AX, MUL_CAND_H ; A_H AXMUL _ ; A_H * B_L DX, AXADD BP, _ ; U

15、pdate PROD_1_ DI, DX ; Update PROD_2ADC SI, _ ; Adjust PROD_3 if there is a carry-inMOV AX, MUL_CAND_L ; A_L AXMUL _ ; A_L * B_H DX, AXADD _, AX ; Update PROD_1ADC DI, _ ; Update PROD_2ADC _, 0H ; 有进位时调整 PROD_3 MOV PRODUCT_0, CX ; 保存 PROD_0MOV PRODUCT_1, BP ; 保存 PROD_1MOV PRODUCT_2, DI ; 保存 PROD_2MOV PRODUCT_3, SI ; 保存 PROD_3INT 3H ; 中断点MAIN ENDPEND MAIN

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号