汇编dosbox怎么直接执行一个程序的最后一个指令。里面好多循环。 - 爱问答

(爱问答)

汇编dosbox怎么直接执行一个程序的最后一个指令。里面好多循环。

assume cs:code,ds:data,es:table

 

data segment

db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

db '1993','1994','1995'

//以上是表示21年的字符串 4 * 21 = 84

 

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

//以上是表示21年公司总收入的dword型数据 4 * 21 = 84

 

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

dw 11542,14430,15257,17800

//以上是表示21年公司雇员人数的21个word型数据 2 * 21 = 42

data ends

 

table segment

db 21 dup ('year summ ne ?? ')   //16个字节

table ends

 

code segment

start:

mov ax,data   //data数据 放在ds

mov ds,ax

mov ax,table //table数据 放在 es

mov es,ax

 

mov bx,0 //data中数据定位,用于年份和收入表格

mov si,0 //table中定位,用于定位存放数据的相对位置

mov di,0 //data中用于得到员工数

mov cx,21 //每种都是对应21个数据

s:

   mov ax, [bx]  //将年从data 到 table 分为高16位和低16位

   mov es:[si],ax  //往表格里面传送数据

   mov ax, [bx+2]  /这里因为ax,bx都是16位,2个字节

   mov es:[si+2],ax

 

   //在table种 增加空格,表格要求

   mov byte ptr es:[si+4],20h ;  mov byte ptr [DI],0 将[DI]处的一个字节填为空格

//将收入从data 到 table 分为高16位和低16位

   mov ax,[bx+84]   //84是因为data中年份21个,一个年份4个字节,所以21*4,所以第一行的收入跟第一行的年份相差84。

   mov es:[si+5],ax //因为前面有个空格,所以这里是+5

   mov ax,[bx+86]  //这里其实就是84+2

   mov es:[si+7],ax

 

   //table 增加空格

   mov byte ptr es:[si+ 9],20h

 

   //将雇员数从data 到 table

   mov ax,[di + 168]  //与上同理

   mov es:[si + 10],ax

 

   //table 增加空格

   mov byte ptr es:[si+12],20h

 

   //计算工资

   //取ds处工资,这里需要32位

   mov ax,[bx + 84]

   mov dx,[bx + 86]

   //计算人均收入

   div word ptr ds:[di + 168] //因为每年雇佣员的人数都不一样,所以要相对应得寻址

   //将结果存入table处

   mov es:[si+13],ax

 

   //table 增加空格

   mov byte ptr es:[si + 0fh],20h

 

   //改变三个寄存器值

   add si,16  //一行16字节

   add di,2  //员工占2个字节

   add bx,4  //收入和年份都是4个字节

 

loop s

 

mov ax,4ch

int 21h

code ends

end start

汇编dosbox怎么直接执行一个程序的最后一个指令。里面好多循环。

一个一个t好类。g又找不到最后一个指令地址。

你要么用U命令反汇编并找到你要结束的指令,然后用g执行

要行直接用g指令,它会一直执行直到程序结束

古老的DOS,调试程序的确很不方便的(以前调试,一个程序要打几十个甚至上百个t的)

你打开DOSBOX后不就出来一个黑窗口吗,然后你在黑窗口里面输入命令就行了,就跟在DOS下一样操作呀。dosbox要访问你电脑里面的文件时,虚拟一个盘,映射到你电脑上某个文件夹,你把要访问的文件放在这个文件夹下就行了。

下一篇:我个人非常重视用车安全性,最近看上新CS55,因为IACC技术很吸引人

上一篇:编一个javaApplication程序,计算从10到20的平方值,

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?