汇编语言x86编程计算表达式(a*b+c-d)(e+f)

汇编语言x86编程计算表达式(a*b+c-d)(e+f),第1张

; (ab+c-d)/(e+f) 

 

        CODE  SEGMENT

              ASSUME    CS:CODE

           A  DW        12

           B  DW        23

           C  DW        34

           D  DW        45

           E  DW        56

           F  DW        67

           X  DW        

      START:  PUSH      CS

              PUSH      CS

              POP       DS

              POP       ES

              MOV       AX,A

              MOV       BX,B

              IMUL      BX

              MOV       BX,AX

              MOV       CX,DX

              MOV       AX,C

              CWD

              ADD       BX,AX

              ADC       CX,DX

              MOV       AX,D

              CWD

              SUB       BX,AX

              SBB       CX,DX

              MOV       DX,CX

              MOV       AX,BX

              MOV       BX,E

              ADD       BX,F

              IDIV      BX

              MOV       X,AX

              MOV       AH,4CH

              INT       21H

        CODE  ENDS

              END       START

windows 自带计算器,菜单-查看-程序PNG windows 自带计算器,菜单-查看-程序PNG 使用 Windows 自带计算器进行多种进制计算PNG 使用 Windows 自带计算器进行多种进制计算PNG octave-onlinenet 十进制转十六进制 dec2hex(0xF) octave-onlinenet 十进制转十六进制 dec2hex(0xF) 《x86汇编语言:从实模式到保护模式》 内存和内存访问示意图 《x86汇编语言:从实模式到保护模式》 内存和内存访问示意图 《x86汇编语言:从实模式到保护模式》8086处理器内部组成框图png 《x86汇编语言:从实模式到保护模式》8086处理器内部组成框图png dec2hex(0x82260+0xFFFF) ans = 9225F dec2hex(0x82260+0xFFFF) ans = 9225F

这不是WIN 8的问题。这是DOS命令怎么使用的问题。

在DOS下,你需要学会两种命令:

更改当前目录、进入子目录(即文件夹)的命令。

它的命令格式是:

CD 文件夹路径

如果要更改当前盘,比如从D:\> 变成 C:\>,则只需要简单地输入命令 C: 即可

运行可执行程序命令。可执行程序是指exe,com,bat格式的文件。

它的命令基本格式是:

程序文件名 参数

你要处理汇编语言编写的程序,需要将asm文件汇编成obj文件,再将obj文件连接成exe文件,然后才能调试或运行它。

假设:

你的汇编工具程序放在C:\MASM615 这个文件夹中。(你的图中 MOUNT命令成功后,原来D:\MASM615 在DOSBOX里就变成了C:\MASM615)

你编写的程序文件名是TESTASM,也放在这个文件夹中。

你应当这样执行命令:

第1步:更改当前目录,进入汇编工具所在的目录。命令为:

CD MASM615

第2步:用汇编程序进行汇编,生成OBJ文件。命令为:

MASM TESTASM

第3步:用连接程序对生成的TESTOBJ文件进行连接,生成可执行程序 TESTEXE。命令为:

LINK TESTOBJ

如果没有错误,你就可以调试或运行你编出来的程序了。

另外,有些汇编工具可以用一条ML命令实现汇编和连接两项工作,那样的话只需要一条命令 ML TESTASM就可以完成第2步和第3步两步工作。

编译器自举!搜索这个关键字

程序都是编译器编译的。这个是肯定的

至于第一款X语言编译器是不是直接1010101010自己写的那就不知道啦

一般开发编译器的话。有两条路选择

1利用yacc(或者其变种)&lex(词法分析)-等工具自己生成语法模板

词法语法都可以使用这些工具自己生成

然后自己编写生成的中间码和生成的机器码就可以了

一般做编译原理类似试验都是如此的。许多编译器也的确是这样

2自己写词法分析和语法分析。可以参考一些开源的编译器

lcc-这个是ANSI C99标准的编译器是开源的

或者nasm,watcom等编译器到上不少开源的编译器

总的来说。高级语言编译器比较难写

如果想快速写出一个的话

可以采用第一种做法。利用工具生成语法词法模板

先写一个简单的汇编编译器比较简单

开源的有nasm,jwasm(支持masm语法开源的编译器)

fasm(这款编译器是自举的就是自己可以编译自己),

剩下的就是自己做好语言规则关键字map

引用高手的话。语言map做好了你的编译器也做好一半了

剩下的都是机械性的工作了。

生成x86或者arm指令。

优化工作这个很难解释根据你所需要的做吧

毕竟可以做出一个无错,又XX的编译器已经很难得

你可以选择使用现有的编译器开发自己的编译器

然后等到你的编译器支持相当数量指令和成熟度的时候

使用自己的语法重新写一遍编译器

这样你就可以用自己的编译器开发自己的编译器了(是不是很邪恶)

另外举几个例子

Delphi的编译器是C++ Builder开发的。

而C++ Builder的IDE是Delphi开发的

C++ Builder的编译器是C++ Builder开发的-这个就是编译器自举了。。Delphi和C++ Builder共享一个后端化优化器。

Delphi 早期的版本的编译器是tasm直接编译的。可见Anders的汇编功力多强悍(Anders也就是后来VJ++,C#,NET工程的核心架构师最关键的灵魂级人物)

VC++的编译器是VC++开发的。很明显这都说明了编译器自举

自己开发自己。如果一个编译器可以做到自己编译自己。那基本上就可以实现任何功能了。

关于编译器开发的书籍可以看一下

龙书《编译原理(第二版)》

虎书《现代编译原理-C语言描述》

鲸书《高级编译器设计与实现》

建议从鲸书看起。然后是龙书

再来是虎书--虎书里面描述了许多现代编译器(正如其名)技术

例如面向对象啦,优化,垃圾回收等等

鲸书看完基本上就可以实现一个简单的Tiny C编译器了

然后在龙书巩固,读一下语言规范,自己看一些开源的汇编编译器代码

自己就可以尝试做一个汇编语言编译器了等到技术提高了

在尝试做一些高级语法识别,参考LCC代码做一下ANSI C99的

C语言编译器。再来就看你自己的兴趣和领悟度拉

如果想支持C++的话就得要对编译器做许多方便的研究

类似Java那种跨平台或者Ruby,Python等动态语言

虎书中也有描述。当然看自己功力了

这两句没有复制进去,cx里原本就有值,大于原来的那个值,把退出代码也复制进去了,所以删除后是正确的。

mov ax,4c00h ;返回到dos

int 21h

修正后的代码:

jcxz zd ;cx=0跳转

mov es:[si],cl ;偶地址存放字符的ASCII码

mov byte ptr es:[si+1],0ch ;奇地址存放字符的属性

inc di ;指向下一个字符

add si,2 ;指向下一个地址

jmp short zd2

zd:

mov ah,4ch ;返回到dos

int 21h

zd3:nop

这两个中断都可以用,用INT 1CH 更安全,这两个中断都是每隔54945MS中断一次,很简单你只要搞个分频系数(1000MS/54945)=18

即18次中断就是1S了。另外教你一个不用中断的方法,毕竟进入中断还要写中断服务程序

用BIOS中断读当前的计数值,程序如下:

MOV AH,0H

INT 1AH ;中断调用,读取日时钟

ADD DX,18

MOV BX,DX

REP: MOV AH,0H

INT 1AH

CMP DX,BX ;与目标值比较

JNZ REP ;不等,继续延时,往下走1S就

到了,如果程序中经常要延时1S可以做个宏

或子程序。

说明一下这是个BIOS调用,每隔55MS DX的值会自动加1,思路从上读取到最后一次读取是否超过了18次,这是非常管用的一种,可不用中断。

以上就是关于汇编语言x86编程计算表达式(a*b+c-d)/(e+f)全部的内容,包括:汇编语言x86编程计算表达式(a*b+c-d)/(e+f)、[001][x86汇编语言]1.计数法 2. 处理器、内存和指令、docbox 怎么用mass运行80x86汇编程序啊,新手,什么都不会,求助等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9449636.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存