统计数据区的正、负数并分开存放
配置环境
- 配置环境
- 题目要求
- 编辑程序
- 运行程序
- 后续
-
首先双击下载程序进行下载。(没有安装程序的,可以下载我为大家准备的安装文件。) 不会安装的可以看一下文件
-
将debug.exe放入C盘(没有debug的自行下载)
-
打开DOXBos
-
将masm文件放入D盘(没有masm的自行下载)
-
更改masm文件为123(任意),在文件夹中创建文件123.asm(任意)。
-
在DOXBos程序中 输入mount C D:\123
-
输入C:
-
打开123.asm编写程序
-
第6、7步可以省略,省略办法见这篇文章,设置之后就不必每次都输入
设在BUF数据区有一组有符号字节数据,试编程实现将这组数据区当中的正数和负数分开存放在两个不同的数据区中,并统计正数和负数的个数。假设:BUF数据区中只有正数和负数的情况。
编辑程序DATA SEGMENT
BUF DB COUNT ;BUF中的数据个数
DB 23H,67H,0ABH,0F6H,49H
COUNT=$-BUF-1
PBUF DB 0 ;正数个数
DB COUNT DUP(0) ;正数数据区
NBUF DB 0 ;负数个数
DB COUNT DUP(0) ;负数数据区
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,BUF+1 ;SI指向BUF数据区
LEA DI,PBUF+1 ;DI指向正数区
LEA BX,NBUF+1 ;BX指向负数区
MOV CL,BUF ;循环次数给CX
MOV CH,0 ;
CLD
NEXT:
LODSB ;从数据区取出一个数据
CMP AL,0
JS NNUM ;判断AL中的数是不是负数
STOSB ;是正数存入正数区
INC PBUF ;累计正数的个数
JMP CONT
NNUM:
XCHG BX,DI ;通过交换指令使DI指向负数区
STOSB ;是负数存入负数区
INC PBUF ;负数累加
XCHG BX,DI ;通过交换指令恢复DI的值
CONT:
LOOP NEXT ;数据还没有处理完,转向NEXT处继续
MOV AH,4CH
INT 21H
CODE ENDS
END START
运行程序
-
masm 123.asm
如果出现错误根据提示进行更改
-
link.123
-
运行123.exe
-
运行成功
-
反汇编(为了输入方便,将123.exe改为1.exe,这点大家不用更改,维持你文件名即可)
debug 1.exe
然后用U命令
-u
得到反汇编结果
- 运行结果,查看寄存器(T命令或者G命令) 如果用T命令一步一步执行 可以输入
debug 1.exe
-r
-t
...
(直到得出结果)
如果用G命令全部运行
debug 1.exe
-G 076A:0018 ;(这里是你想要运行到的程序地址)
后续
如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。 欢迎关注公众号。
编写不易,感谢支持。