1.求一篇汇编语言关于debug的实验报告
debug命令及参数如下,你根据你的报告要求适当修改下就可以了,参数挺多,如果字数多捡主要的几个介绍下就可以了,比如-A ,-R,-D-U等等常用的就可以了DEBUG的命令及功能如下:* A[地址] 汇编命令 功能: 将指令直接汇编成机器码输入到内存中。
说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制, 用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,改语句被汇编到 CS:0100区域。 例A:>DEBUG -a 0100 08F1:0100 MOV AH,09 08F1:0102 MOV DX,109 08F1:0105 INT 21H; 08F1:0107 INT 21H;debug tan.exe -u:反编译成汇编语言程码 ………… . . -g 100 指定中断点 Program terminated normally: 另外:我们在DEBUG下可运行一个文件.EXE 如:A:\>debug tan.exe -g 即可开始运行此程序,和在DOS下完全一样: * H[数值][数值] 十六进制算术运算命令 功能: 分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
说明: 替用户完成简单的十六进制数的运算。 例:-h4538 5623 9B5B EF15* I[端口地址] 功能: 从指定的端口输入并显示(用十六进制)的一个字节。
例:-i70 F9;显示70端口的内容为F9 I命令可由80X86的64K个端口取数据* L[地址][盘号:][逻辑扇区号][扇区数] 功能: 将一个文件或盘的绝对扇区装入存储器。 说明: 单个L命令能够装入的最大扇区数是 80H,其中盘号 0,1,2,3……分别代表 A,B,C,……出现读盘错,显示错误信息。
(1)格式1.L装入地址 驱动器名 起始扇区/扇区数 这种方式可把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中,在此外扇区编号引用逻辑/扇区的方式。 例:-L 100 0 01,将A驱的0扇区装至CS:100上 -d 100 10f 08F1:0100 EB 3C 90 3C 53 44 4F 53 -36 2E 32 32 02 01 01 00.L,MSDOS 6.22…… (2)格式2:L装入地址 这种方式可把指定文件装入内存,装入的文件可在进入DEBUG时指定亦可用N命令建立,格式为-n文件名: 例1 DEBUG tan.pas -L 100 例2 DEBUG -n tan.pas -L 100 须知:L命令只能读取逻辑扇区,不能读取硬盘分区表 L命令中所用的磁盘代码A=00,B=01,C=02……* M[地址范围][起始地址] 数据传送命令 功能: 把地址范围内的存储器单元的内容移到起始地址的指定地址中 说明: 传送期间,源区和目标区可以部分重叠;传送后源区域数据保持不变。
例:-e100 41 42 43 44 45 -d100 10f 08F1:0100 41 42 43 44 45 62 62 63 64 -61 62 63 64 61 62 63 64 ABCDEBCDABCDABCD -M 100 104 110 -d110 L1F 08F1:0100 41 42 43 45 0A 21 19-20 01 01 20 07 96 87 9F ABCDE……* N[盘号: ] [路径] [文件名] [扩展名] 功能: 定义操作文件名。 说明: 可同时定义两个操作文件,并将形成的文件控制块相应的设置在内存 CS:5C和CS:6C上,供以后的L和W命令操作之用。
我们在运行程序侦错时,在启动DEBUG时在其后加文件程序名以及该程序的参数或运行文件,但当我们侦错一段后,可能装入其它文件来测试,这时我们可利用N命令来设置而无需退出DEBUG。 例:A:\>DEBUG tan.exe -n youg.pas 当程序侦错一段时间后,若要把tan.exe装入tan1.pas则-ntanl.pas* O[端口地址][数据] 输出命令 功能: 发送字节到指定的输出端口。
例:当我们遇到开机要求输入口令时,可用如下方式取消 -O 70 10 _O 71 00* P[=地址] [数据] 进程命令 功能: 将一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。 说明: 在执行一条子程序调用指令,循环指令,中断指令或一个重复字符串指令时,发出P命令去执行有关指令,并且返回到要执行的下一条指令。
P命令和T一样选用来跟踪程序运行过程用的命令,我们可以在P命令中指定程序运行的起始地址,指令个数,如未指定则CS:IP所指定程序的地址开始一次运行一条令。 P与T命令的差别在于P命令把CALL/INT当成一条指令来执行,简化了跟踪过程,P命令只运行RAM内存的命令,而T命令则可运行RAM和ROM里的程序。
* Q 退出命令。* R[寄存器] 寄存器命令 功能: 一,显示单个寄存器的内容,并提供修改功能。
二,显示所有寄存器内容, 再加上字母标志位状态以及要执行的下一条指令。 三,显示8个标志位状态, 并提供修改功能。
若不想改变则回车即可。 例:-r bx bx 0050 :51 -r AX=0000 BX=0051 CX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0003 ES=0CD3 SS=0CD3 IP=0100 NV UP EI PL NZ NA OP NC 0CD3:0100 0F DB OF 若想改变标志寄存器,用-RF回车,则DEBUG会将标志内容显示出来,若想改变任一标志,只要输入该标志的名称即可。
标志名称 设置 未设置 标志名称 设置 未设置 滋出 OV(未溢出) NV(未溢出) 零位 ZR NZ(不等于零) 方向 DN(减少) UP(增加) 辅助进位 AC NA(无进位) 中断 EI(许可) DI(禁止) 奇偶标志 PE(偶) PO(奇) 符号 NG(负) PL(正) 进位 CY NC(清除进位) 例:-Rf NV UP EI PL NZ NA PO NC :-OV DI← 输入值* S[地址范围] [字符串] 功能: 在指定的地址范围内查找给定的字符串。 说明: 用来指定在。
2.求一篇汇编语言关于debug的实验报告
debug命令及参数如下,你根据你的报告要求适当修改下就可以了,参数挺多,如果字数多捡主要的几个介绍下就可以了,比如-A ,-R,-D-U等等常用的就可以了DEBUG的命令及功能如下:* A[地址] 汇编命令 功能: 将指令直接汇编成机器码输入到内存中。
说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制, 用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,改语句被汇编到 CS:0100区域。 例A:>DEBUG -a 0100 08F1:0100 MOV AH,09 08F1:0102 MOV DX,109 08F1:0105 INT 21H; 08F1:0107 INT 21H;<-XP下运行cmd debug时,应该是INT 20H,21H会出遇无效指令错误 08F1:0109 db 'May I help you $' 08F1:0115←离开a状态 -g ←运行 May I help you 运行结果 Program terminated normally表示运行正常* C[源地址范围][目的地址]比较命令 功能: 比较两内存区域中的内容是否相同,若不同则显示其地址和内容。
如:C4000:0 3F 100 就是用来比较4000;0000-4000:003F与DS:0100-DS:013F之间的内容:其显示格式如下: 内存地址1内含值1内含值2内存地址2 例:比较4000:0 3F 100内容的差异 -C4000:0 3F 100 4000:0000 64 43 08F1:0100 4000:0001 3E 69 08F1:0101 显示内容的差异处 4000:0002 78 FF 08F1:0102 …………………………………… 如果要比较的范围在DS内,则段地址不必指出: 如:-C 0 4 100;比较DS:0---DS:4与DS:100---DS:104 C命令的另一种格式如下:C地址1 L 长度 地址2 如:-C000:0 L4 0;由0000:0与与DS:0开始比较它同-C0000:0 3 0命令相等,显示结果如下: 0000:0000 8A C0 08F1:0000 0000:0001 10 20 08F1:0001 它们都比较4个字节 0000:0002 1C 00 08F1:0002 0000:0003 49 7F 08F1:0003转储命令 * D[地址] 或D[起始地址][目的地址] 转储命令 功能: 以内存映象方式显示内存中的信息。 说明: 转储用左右两部分显示内存映象内容,左边以十六进制,右边以ASCII字符显示,所有不可打印字符用句号(。)
表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符 - 此命令隐含的段地址为DS的值。
若未指定起始地址,则D命令从显示的最后一个单元的下一个单元开始显示,若以前没有使用给D命令, 则从初使化的段寄存器的内容,加上地址偏移量 0100H 开始显示。 例:-d10,4f即为显示DS:4f的内容在D命令中如不指出段地址,则其默认为DS段。
如指明段地址,则从指明的段地址列出指定的范围 如:-dfff:00:0f 我们也可以指定长度来列出所需要内存内容 如:-d 100 L20即为显示由DS:100-DS:11F的内容,共20H个字节: * E[地址] [字节串) 修改内存命令 功能: 从指定的地址开始修改内存值。 格式:E起始地址[数据行] (1)用给定内容代替指定范围的单元内容 -E地址 内容表 例:-E100 41 42 43 44 48 47 46 45 -D 100,L08 08F1:0100 41 42 43 44 48 47 46 45 ABCDHGFE… (2)逐个内存内容 例:-E 100: 08F1:0100 76 42 :42是操作员键入 此命令是将原100号内存内容76修改为42,用D命令可察看。
* F[地址范围] [字节或字节串] 填写命令 功能: 将要填写的字节或字节串填入由地址范围指定的存储器中。 例:-f100 120 61 62 63 64 -d100 11f 08F1:0100 61 62 63 64 61 62 63 64 -61 62 63 64 61 62 63 abcd abcd abcd abcd 08F1:0110 13 67 98 E3 C8 2E B3 B6 -03 21 AC 19 3121 4E 96 g……1… 如果数据行超出指定的范围,则填不下的数值会被忽略。
例:-f 100 107 41 43 43 44 45 46 47 48 49 4A 4B 4C 4D -d 100,lof 08F1:0100 41 42 43 44 45 46 47 64 -61 62 63 64 ABCDEFGdabcdabcd 由上例可看出,超出范围的数据被忽略 另外,F和E命令都可填入字符串: 如:-F 100 105 "MSDOS" -d 100 l0f 08F1:0100 4D 53 44 4F 53 46 47 64 -61 62 63 64 MS DOS FGabcd abcd* G[=起始地址] [[断点]……] 执行命令 功能: 执行正在调试的程序,当达到断点时停止执行, 并且显示寄存器标志和下一条要执行的命令。 说明: 如果没有指定起始地址,那么当前指令地址由CS,IP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。
如果指定断点,当指令到达指令地址时停止执行,并显示各寄存器标志位的内容和下一条要执行的命令,最多允许用户设定10个断点。 例:A:\>debug tan.exe -u:反编译成汇编语言程码 ………… . . -g 100 指定中断点 Program terminated normally: 另外:我们在DEBUG下可运行一个文件.EXE 如:A:\>debug tan.exe -g 即可开始运行此程序,和在DOS下完全一样: * H[数值][数值] 十六进制算术运算命令 功能: 分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
说明: 替用户完成简单的十六进制数的运算。 例:-h4538 5623 9B5B EF15* I[端口地址] 功能: 从指定的端口输入并显示(用十六进制)的一个字节。
例:-i70 F9;显示70端口的内容为F9 I命令可由80X86的64K个端口取数据* L[地址][盘号:][逻辑扇区号][扇区数] 功能: 将一个文件或盘的绝对扇区装入存储器。 说明: 单个L命令能够装入的最大扇区数是 80H,其。
3.谁能帮我写一个实验心得啊``套话就行`谢谢了`
参考啊,记得接纳答案啊。
9.高分悬赏
.model small .386 .stack 100h .data oper1 dd 0h oper0 dd 0h n dw 0ahdisply macro ;定义宏 mov eax , ebx mov edx , 0h div ecx mov ebx , edx mov dl , al endm ;*************************** .code ;---------------------------- main proc far start: push ds xor ax , ax mov ax , @data mov ds , axhere: ;标识返回,用于循环输入 mov esi , 2h ;输入两位数 xor ebx , ebx xor eax , eax mov ebx , 0hrotate:mov eax , ebx ;此处用BL可能导致ah位不为零 mul n mov bx , ax mov ah , 01h int 21h sub al , 30h ;字符转换为数字,减去30h cmp al , 0ah jg exit ;输入字母则退出主程序 add ebx , eax dec esi cmp esi , 0 jnz rotate mov dl , ' ' mov ah , 02 int 21h and ebx , 000000ffh mov ecx , ebx xor edx , edx xor eax , eax call fibo ;递归调用mov ebx , edx xor eax , eax mov si , 8 mov oper0 , 0ah mov ecx , 10000000doutp: disply ;print the contents of DL on the screen add dl , 30h mov ah , 02h int 21h mov edx , 0 mov eax , ecx div oper0 mov ecx , eax dec si cmp si , 0 jg outp mov dl , ' ' mov ah , 02 int 21h jmp hereexit: mov ah , 004ch int 21h main endp;--------------------------;**************************fibo proc near ;菲薄拉起子程序 cmp ecx , 0h jz sp0 cmp ecx , 1h jz sp1 dec ecx call fibo ;递归调用 jmp largesp0: mov oper0 , 0h ;特殊处理 mov oper1 , 1h mov eax , 0h mov edx , 1 jmp quitsp1:mov oper0 , 1 ;特殊处理 mov oper1 , 1 mov eax , 0 mov edx , 1 jmp quit large:mov eax , oper0 add eax , oper1 mov edx , eax mov eax , oper1 mov oper0 , eax mov oper1 , edx quit:ret ;返回fibo endp ;-----------------------end start ;**********************以上是第一个程序datarea segment head dw 1020H,2002H,3033H,4440H,5008H,6008h,7008h,8008h,9008h,0a00h,0b00h,0c00h,0d00h,0e00h,0f00h,0000h tal dw 00ffh,0ff00h,55aah,0aa55hdatarea ends;*******************************progman segment ;-------------------------------main proc far assume cs:progman , ds:datarea full equ 32dstart: ;starting part of progman push ds sub ax , ax push ax mov ax , datarea mov ds , ax;main part of the progman goes here mov si , 8 mov cx , 4 mov di , 0;--------------------------;用BX 保存前一个要后移的数据,DX保存当前数据,AX保存END中数据;**************************************** mov bx , head[si] ;从第五个元素开始,格四个元素插一个rotate: mov bx , head[si] mov ax , tal[di] ;后移后,tal[di]将保持不变!!!!!!!!所以30-33行特殊处理 mov head[si] , ax cmp di ,6 jz last ;等于6则不前移,直接跳到last!! mov ax , tal[di+2] mov tal[di] , axlast:mov ax , si add ax , 10 ;SI跳过一个插入元素与四个原始数据 nextp:add si , 2 mov dx , head[si] mov head[si] , bx mov bx , dx mov bp , full add bp , di cmp si , bp ;【full+di】则元素6直接跳过了,不用ax则不能跟新最后几位元素 jng nextp add di , 2h mov si , ax dec cx cmp cx , 0 jg rotate ;------------------------------------------输出开始 ppp: xor si , siprint:mov ch , 4 mov bx , head[si] add si , 2rote: mov cl , 4 rol bx , cl mov al , bl and al , 0fh add al , 30h cmp al , 3ah jl outp add al , 7h outp: mov dl , al mov ah , 2 int 21h dec ch jnz rote mov dl , 'h' mov ah , 02h int 21h mov dl , 20h int 21h cmp si , 38 jng print mov ah , 4ch int 21h main endp;---------------progman ends;**********end startmov si , 0outp: mov ch , 4 mov bx , head[si] mov ah , 2 mov dl , 20h int 21h cycle:mov cl , 4 rol bx , cl mov al , bl and al , 0fh add al , 30h cmp al , 3ah jl printit add al , 7hprintit: mov dl , al mov ah , 02h int 21h dec ch jg cycle mov dl , 'h' mov ah , 2 int 21h add si , 2 cmp si , 40 jng outp ret以上是第二个华乐我很多时间啊,直接可以运行,希望对你有帮助。
共同进步。
转载请注明出处育才学习网 » 汇编语言实验一报告怎么写