回答你这个问题前我需要阐明几个相关概念 比较长 你可能没兴趣看完
不过没有关系,毕竟知识是没有那么容易获得的
OK 回到正题 你是想要显示在寄存器的值
那么 我首先假设:
您的运行环境是有标准输入输出设备(键盘-显示器)的
那么我再假设您的运行环境是在某种OS调度下的,
当然无OS也可以输出你想要的字符,
但是这需要你自己从硬盘MBR自举自己初始化设备自己写设备驱动对硬件IO进行读写
这完全可行,但这确实不切合实际 毕竟有一大堆成熟的OS提供了系统调用接口
也就是API 这样的中间层帮助你 *** 作这些标准输入输出设备显示字符 为何要重新造一堆没啥用的轮子呢
那么好了 到这里 我再假设亲 您的电脑不是MAC 也不是 linux 而是被程序员最为鄙视的windows系统
毕竟这个系统最为广泛,而且易用是吧 大多数人入门PC都是微软的锅不是吗
那么说到这里了 假设了辣么多 麻痹答主还是没有说到底怎么将这些破烂寄存器里的数字变成ASCII字符显示在标准输入输出设备上啊
亲,角多嘛呆 概念如果没有阐明 亲你也是非常糊涂的不是吗
那么再回主题
显然 OS不可能让你直接 *** 作 显存和I/O端口往显示器上丢字 第一,这不安全 系统资源必须由核心代码独占 其二,大多数用户对具体如何 *** 纵显卡往显示器上丢字这种又臭又长的破过程不感兴趣
毕竟你只是想丢几个字到垃圾显示器上嘛 那么就用系统给的API接口不就完了
那么调用系统API接口 那么就需要声明API库 的二进制调用头文件
这个有人帮你做过这事了 无论是masm32 还是radasm 还是masmplus啥的 都集成了微软的MASM库调用 inc 头 你只要找到相应的头文件include一下 然后在 invoke一下 他们提供的函数就行了
当然编译参数里不要忘记加上命令行程序的开关
最后还有一件事,也就是传说中的 二进制整形 如何变成 16进制ASCII 或者 10进制ASCII字串 这个一言难尽 还是写一段 HEX2ASCII 的过程给你看一下吧 你参考一下
或者你不愿写这个 调用 itoa() 或者 wsprintf()这样的函数 自己转换一下也是很简单的事
DATA SEGMENT
A DB 05FH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA;置DS段初值
MOV DS,AX
MOV DL,A
MOV CL,4
SHR DL,CL;右移4位获得高4位
ADD DL,030H;0~9加30H,A~F加37H
CMP DL,'9';将双分支转化为单分支
JBE NEXT1
ADD DL,7
NEXT1:MOV AH,2
INT 21H;显示高位十六进制
MOV DL,A
AND DL,0FH;高4位清0获得低4位
ADD DL,30H
CMP DL,'9'
JBE NEXT2
ADD DL,7
NEXT2:MOV AH,2
INT 21
MOV AH,4CH
INT 21H
CODE ENDS
END START
当然这是16bit 版本 其实改成 32版本也不难 首先要你看得懂
另外PS: 你要保护eax的内容 用 push eax 压栈指令不就完了 要用的时候 pop eax就好了
但是记得堆栈需要后入先出 要不爆栈别怪我
编译只是保证没有语法错误,但是不能保证你的程序的算法没有错误,如果你的程序中有比较严重的Bug,如果说访问了系统保护的内存,出于保护,windows会中止你的程序,或是抛出一个异常,如果异常没有被捕获并加以处理,程序也会中止,当然,这时你也有机会用调试工具去debug。这种运行期的错误是需要程序员去调试排除的。
程序员一直都是一个备受人们关注的群体。2014年,据IDC统计,全球约有1850万名程序员,中国占10%。随着近年全国互联网创业热潮的兴起,“互联网+”、“云计算”以及“智能硬件”等领域发展迅速,市场对程序员的需求更为旺盛。
由程序员客栈联合稀土掘金通过对北京、广东、浙江、上海等全国28个省、直辖市及特别行政区的10W+优秀程开发者进行了一次调查。调查报告里对程序
以上就是关于汇编语言中,怎么单独显示某个寄存器的内容全部的内容,包括:汇编语言中,怎么单独显示某个寄存器的内容、为什么编译正确的c++程序在运行时会停止工作、爆栈程序员是一种什么样的存在等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)