首页编程masm5.0(MASM5.0下载安装与运行第一个HelloWorld)

masm5.0(MASM5.0下载安装与运行第一个HelloWorld)

编程之家2024-01-28110次浏览

一、masm5.0 edit 和 debug 命令无效

edit和debug在C:\windows\system32下的,找一下有没有这两个文件,如果有,就可以在里面打开,不过在其他地方打不开可能机子的系统环境没有设置好,右键我的电脑-高级-属性-环境变量-系统变量,在下拉列表中找到一个叫path的变量名,如果没有就新建一个变量名值path C:\windows\system32有就双击这个属性,在变量后加上C:\windows\system32,在不同变量间用分号隔开

masm5.0(MASM5.0下载安装与运行第一个HelloWorld)

二、masm5.0 debug使用

DEBUG是专门为汇编语言设计的一种调试工具软件,可用来检查、修改寄存器和内存单元

的内容,装入运行程序,汇编及反汇编机器语言程序,可用单步、断点及连续的方式执行程

序。

DEBUG启动方式:

>DEBUG文件名.EXE(Enter);回车进入DEBUG状态

-;"-"是 DEBUG提示符

masm5.0(MASM5.0下载安装与运行第一个HelloWorld)

以下是 DEBUG的基本操作命令

一. A(汇编)命令

用途:把计算机的宏汇编语句直接汇编到内存中。

格试: A [address]

说明: A是一条逐行汇编命令,当使用 A命令时,并不直接将 16进制字节,机器码

而键入是助记符,但键入的汇编语言被汇编在指定地址的连续单元中。

masm5.0(MASM5.0下载安装与运行第一个HelloWorld)

在A命令后没指出地址,分两种情况。

没指定地址同时前面没有使用汇编命令,则语句被汇编到 CS:100开始的区域中

没指定地点,但前面已有汇编命令,则语句被汇编到紧接着前一条汇编语句的后一个地址单

元里。

例:-A

1298:0200 PUSH DS

1298:0201 MOV AX,0000

1298:0204 PUSH AX

1298:0205 MOV AX,128F

1298:0208 MOV DS,AX

1298:020A MOV AX,F000

1298:020D MOV ES,AX 1298:020F MOV SI,FFFE

1298:0212 ES:

1298:0213 MOV AL,[SI]

1298:0215 CMP AL,FC

1298:0217 JNZ 0223

1298:0219 LEA DX,[006B]

1298:021D CALL 024B

二. C(比较)命令

用途:比较两个内存的内容。

格式: C range address

说明:比较两个内存的内容,比较长度由 range决定,若发现不等的字节,按下列格式显示

它们的内容。

例:-D 100

33E2:0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

33E2:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

-D 200

33E2:0200 74 68 65 20 6B 69 6E 64-20 6F 66 20 6D 69 63 72

33E2:0210 6F 20 63 6F 6D 70 6E 74-65 72 20 69 73 20 41 54

-C 0100 L08 0200;比较100H和200H开始的八个字符。

33E2:0100 00 74 33E2:0200;显示不同的字符。

33E2:0101 00 68 33E2:0201

33E2:0102 00 65 33E2:0202

33E2:0103 00 20 33E2:0203

33E2:0104 00 6B 33E2:0204

33E2:0105 00 69 33E2:0205

33E2:0106 00 6E 33E2:0206

33E2:0107 00 64 33E2:0207三. D(显示)命令

用途:显示部分存储区的内容。

格式: D [range]或 D [address]

说明:显示指定内存单元的内容。

⑴在输入的起始地址中,只键入一个相对偏移量,段地址为 DS中。

例:-D

1298:0200 1E B8 00 00 50 B8 8F 12-8E D8 B8 00 F0 8E C0 BE

1298:0210 FE FF 26 8A 04 3C FC 75-0A 8D 16 6B 00 E8 2B 00

1298:0220 EB 28 90 3C FD 75 0A 8D-16 46 00 E8 1D 00 EB 1A

⑵若要显示指定范围的内容,则要输入显示的圃橡始和结束地址。

例:-D 0200 027F

125F:0200 00 42 34 00 00 00 00 00-00 00 00 00 00 00 00 00

125F:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

125F:0270 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

⑶如果没有指定地址,则从上一次的 D命令最后一个单元开始显示。

四. E(修改)命令

用途:修改RAM区单元的内容。

格式: E address[List]

说明:该命令可以在指定的地址里修改一个或多个字节的内容,同时也可连续的修改每个字

节的内容。

⑴连续修改每个字节的内容。

例:-E 0200

125F:0200 00.12 00.13 00.14 00.15 00.16

⑵用给定的内容去代替指定范围的内存单元内容。

例:-E 0200'the kind of micro compnter is AT'

-D 200

33E2:0200 74 68 65 20 6B 69 6E 64-20 6F 66 20 6D 69 63 72 the kind of micr 33E2:0210 6F 20 63 6F 6D 70 6E 74-65 72 20 69 73 20 41 54 o compnter is AT

⑶输入一个连接号"-",则显示前一个地址单元的内容。

例:-E 0200

125F:0200 12.-;200单元不修改,键入"-"。

125F:01FF 13.AC-;AC代替13。

-D 01FE 0200

125F:01FF AC 12

五. F(填充)命令

用途:把表中的值,填到内存单元中。

格式: F range List

说明:如果 List所含的字节数比 range小,则 List被重复使用,

如 List所含的字节数比 range大,则 List多余被略去。

例:-D 0200 0210

33E2:0200 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

33E2:0210 00

-F 0200 L0a'abcdefghij'

-D 0200 0210

33E2:0200 61 62 63 64 65 66 67 68-69 6A 00 00 00 00 00 00 abcdefghij

33E2:0210 00

六. G(执行)命令

用途:执行需运行的程序,并对调试的程序进行断点测试跟踪。

格式: G[=address][address[address..]

说明:程序从当前指令开始执行,执行的地址由 CS和 IP的内容决定。如用"=address"

参数取代,则程序从 CS:"=address"开始执行。

-G;从IP=0200开始执行,结果显示在屏幕上。

the kind of micro compnter is AT Program terminated normally

-G 0252;程序从0200H单元开始执行,在0252H处设置一个断点。

AX=0000 BX=0000 CX=04E2 DX=0000 SP=0200 BP=0000 SI=0000 DI=0000

DS= 125F ES=125F SS=126F CS=1298 IP=0200 NV UP EI PL NZ NA PO NC

1298:0252 CB RETF

-

*注意:一旦程序运行结束( DEBUG显示"program terminated normally"信息),

⑴再次执行,必须重新启动程序。

⑵地址参数指向的位置必须含有合法的 8086/8088指令码。

⑶堆栈指标器必须是合法的。

⑷对断点只键入一个偏移量,G命令设该断在CS寄存器中。

七. H(16进制运算)命令

用途:对两个十六进制数进行加、减,然后显示出和与差。

格式: H Value Value

例:- H A B

0015 FFFF;和为15H,差为 FFFFH

-H 12 30

0042 FFE2;和为42H,差为 FFE2H

八. M(传送)命令

用途:把由 range规定的内存单元区域的内容传送到 address开始的单元。

格式: M range address

说明:传送期间总是执行复盖传送,源区域的数据保持不变。

-Dcs:0000 000f

1298:0000 1E B8 00 00 50 B8 8F 12-8E D8 B8 00 F0 8E C0 BE

-Dds:0000 0010

125F:0000 CD 20 00 A0 00 9A F0 FE-1D F0 F4 02 94 0E 2F 03-Mcs:0000 l10 ds:0000

-Dds:0000 000f

125F:0000 1E B8 00 00 50 B8 8F 12-8E D8 B8 00 F0 8E C0 BE

-q

九. N(命名)命令

用途:给文件定名,用于文件存盘或装入内存区。

格式: N filespec[filespec...]

-N A.COM;给文件命名为A,扩展名为COM。

-L;把A.COM文件装入内存。

-U;用反汇编检查装入内存的程序正确否。

1298:0200 1E PUSH DS

1298:0201 B80000 MOV AX,0000

1298:0204 50 PUSH AX

1298:0205 B88F12 MOV AX,128F

1298:0208 8ED8 MOV DS,AX

1298:020A B800F0 MOV AX,F000

1298:020D 8EC0 MOV ES,AX

1298:020F BEFEFF MOV SI,FFFE

1298:0212 26 ES:

1298:0213 8A04 MOV AL,[SI]

1298:0215 3CFC CMP AL,FC

1298:0217 750A JNZ 0223

1298:0219 8D166B00 LEA DX,[006B]

1298:021D E82B00 CALL 024B

十. Q(退出)命令

用途:退出 DEBUG状态。格式: Q

说明: Q命令不保留正在内存中运行的文件,若保留需用"W"命令, DEBUG返回

到命令处理程序,然后显示出正常的命令提示。

-Q

>;回到DOS下

十一. R(寄存器)命令

用途:显示和修改各寄存器的内容。

格式:R[Register name]

说明:当 R命令后面不带任何参数时,显示出 13个 16位寄存器的内容,同时又显示

出标志寄存器各位状态,最后显示出下一条要执行的指令内容。

当R命令后面带参数时,显示出该寄存器的内容,同时又可进行修改。

例:-R

AX=0000 BX=0000 CX=04E2 DX=0000 SP=0200 BP=0000 SI=0000 DI=0000

DS=125F ES=125F SS=126F CS=1298 IP=0200 NV UP EI PL NZ NA PO NC

1298:0200 1E PUSH DS

-R AX;显示AX寄存器的内容。

AX 0000

:0200;用0200取代0000,AX的当前值。

-RAX

-AX 0200

:

-R F

NV UP EI PL NZ NA PO NC- OV EI ZR;修改NVEI,NZ标志位。

标志寄存器共有九个标志位,其中追踪标志 T不能改变,其它八个标志位可以显示和修改,

并且以二个字母的带码来分别表示各位状态。

十二. S(检索)命令

用途:在指定的 Range范围内找到 List规定的字符。格式: S range List

说明:显示出符合规定字符处的地址,如显示提示符"-",则表示没有发现规定字符。

-D 0200 0220

33E2:0200 61 62 63 64 65 66 67 68-69 6A 00 00 00 00 00 00

33E2:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

33E2:0220 00

-S 02 0220 60;在0200H单元,到0220H单元内,查询60H字符。

-;没有检索到,出现"-"。

-D 0200 0220

125F:0200 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

125F:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

125F:0220 00

-S 0200 0205 00;查询为00H的字符。

125F:0200

125F:0201

125F:0202

125F:0203

125F:0204

125F:0205;显示出查询到为00H的字符。

十三. T(跟踪)命令

用途:执行以 CS:IP中指定开始的一个或几个指令,并显示出执行每条指令后所有寄存器的

内容。

格式: T[=address][Value]

说明: T命令可以单条跟踪执行每一条指令,也可以由命令中Value诀定执行几条指令,每执

行一条指令,IP就自动指向下一条指令的地址。为了改变程序的起始地址,可以修改 IP的

内容,使程序不按正常顺序执行。

-T

AX=0000 BX=0000 CX=04E2 DX=0000 SP=01FE BP=0000 SI=0000 DI=0000 DS=125F ES=125F SS=126F CS=1298 IP=0201 NV UP EI PL NZ NA PO NC

1298:0201 B80000 MOV AX,0000

-T 2;连续执行两条指令。

AX=0000 BX=0000 CX=04E2 DX=0000 SP=01FE BP=0000 SI=0000 DI=0000

DS=125F ES=125F SS=126F CS=1298 IP=0201 NV UP EI PL NZ NA PO NC

1298:0201 B80000 MOV AX,0000

AX=0000 BX=0000 CX=04E2 DX=0000 SP=01FE BP=0000 SI=0000 DI=0000

DS=125F ES=125F SS=126F CS=1298 IP=0204 NV UP EI PL NZ NA PO NC

1298:0204 50 PUSH AX

十四. U(反汇编)命令

用途:将内存某一区的计器码(目标码),用此命令反汇编为源程序。

格式: U [address]、(U range)

说明: U [address]命令从反汇编规定地址的指令开始,如未规定地址,

则以上一个 U命令的最后一条指令的地址为下一条反汇编的起始地址,这样就可以进行连续

的反汇编。

例:-U

1298:0200 1E PUSH DS

1298:0201 B80000 MOV AX,0000

1298:0204 50 PUSH AX

1298:0205 B88F12 MOV AX,128F

1298:0208 8ED8 MOV DS,AX

1298:020A B800F0 MOV AX,F000

1298:020D 8EC0 MOV ES,AX

1298:020F BEFEFF MOV SI,FFFE

1298:0212 26 ES:

1298:0213 8A04 MOV AL,[SI]

1298:0215 3CFC CMP AL,FC 1298:0217 750A JNZ 0223

1298:0219 8D166B00 LEA DX,[006B]

1298:021D E82B00 CALL 024B

十五. W(写)命令

用途:把正在调试的文件写入磁盘。

格式: W [address]

说明:此命令把指令内存区域中的数据写入文件,一般用 N命令来命名文件名, BX:CX置入文

件长度.

-A

1298:0100 PUSH DS

1298:0101 MOV AX,0000

1298:0104 PUSH AX

1298:0105 MOV AX,128F

1298:0108 MOV DS,AX

1298:010A MOV AX,F000

1298:010D MOV ES,AX

1298:010F MOV SI,FFFE

1298:0112

-RBX

BX 0000

:0000

-RCX

CX 0000

:0012;文件长度送 BX:CX

-N A.COM;文件名为 A.COM

-W;存入磁盘

Writing 0000F bytes-q

十六. O(输入)命令

用途:向指定的端口输出一个字节。

格式: O prot address byte

例:-O 300 23;从 300H端口输出 23H

十七. L(装入)命令

用途:把磁盘上的内容装入内存。

格式: L [address]

例:-N A.COM

-L;把A.COM文件从磁盘装入内存。

-U

1298:0200 1E PUSH DS

1298:0201 B80000 MOV AX,0000

1298:0204 50 PUSH AX

1298:0205 B88F12 MOV AX,128F

十八. I(输入)命令

用途:从指定的端口显示出输入数据。

格式: I port address

例:-I 300

FF;从 300H端口读入 FFH

三、masm5.0汇编问题,编译过程无错误,但是最后输出无结果

你这个程序,没有屏幕输出显示的代码。

所以,运行后屏幕上无显示并直接返回DOS,是对的。

若要加上显示部分,代码会比较长。需要先将压缩BCD分离,再转换成ASCII,再显示。

你这个程序,是用来练习串指令和BCD码运算的。它正确的用法不是直接运行,而是在调试器DEBUG中调试运行,通过单步、断点等方式检查运行的中间结果和最后结果(DAT2的内容)。

emule服务器(解决eMule无法连接服务器问题的方法)massstorage(USB mass storage协议)