汇编语言大作业
【疑问】DOS调用会修改AL寄存器的值?
- 代码部分
- debug
图中可见,在上下两句代码指令之间,并没有对al进行任何操作,可是在经过09h号dos功能调用之后,al中的值却发生了改变。
解决:
应该是没有定义堆栈段的缘故
汇编语言大作业
程序片段
等待用户输入指令
跳转表法实现多分支程序
几个ASCII码
按键 | ASCII码 |
---|---|
回车 | 0DH |
换行 | 0AH |
空格 | 20H |
ESC | 1BH |
$ | 24H |
相关DOS命令
程序框架相关DOS命令
01H
等待用户从键盘输入一个字符,回显,检测ctrl+break
07H
等待用户从键盘输入一个字符,不回显,不检测ctrl+break
08H
等待用户从键盘输入一个字符,不回显,检测ctrl+break
02H
向屏幕输出一个字符
06H
控制台输入输出
09H
向屏幕输出一串字符
字符串末尾用$符号
0A
从键盘输入一串字符
键盘输入缓冲区的定义规则
第四问相关DOS命令
2DH
时间设置
2CH
时间获取
相关BIOS命令
BIOS(Basic input/output system)固化在 ROM 中,包括 I/O 设备的处理程序和许多常用的例行程序。
对用户程序来说,可由特定指令 INT n(n 为中断号)通过软终端的方式调用。不管 DOS 是否装入系统,这些调用可以直接控制 I/O 设备。
00H
设置显示器,清屏
- BL中设置分页,一共有四页,一般用第0页,可以实现分屏功能。
02H
设置光标位置
字符模式的光标位置,列是x,行是y
1 | mov dx, 0100h ; DH=row 1, DL=column 0 |
第三问解法
- 用0AH号DOS命令依次接收用户键入的数字,注意把ASCII码转换成数值
- 用0AH号DOS命令统计到的用户键入字符数,作为用户输入数值的位数,利用位置加权法计算结果。
汇编09h
输出乱码
必须要在程序开始时初始化ds寄存器
1 | ;初始化ds寄存器 |
汇编子程序调用问题
子程序无论定义在了什么位置,程序走到这个位置之后,都会自动调用一次子程序。
汇编断点子程序
1 | assume cs:code |
ASCII大小写转换
大写转小写:|20h
小写转大写:&0DFh
汇编基址变址寻址格式
MOV AL,BX
或MOV AL,[BX+SI]
汇编语言中loop指令
要注意cx中保存的是循环次数,循环次数保存在cx中。
DOS命令0AH
1 | keybuf1 db 0ffh |
这是定义最多能输入255个字符,但包括最后的回车字符(所以有效输入字符为254个),因为最后一个字节存放回车字符,所以不必担心向最后一个字节写入$时会发生溢出。
ASCII字符型数字转整型数字
ASCII码字符型数字转换为整型数字:字符型数字 - ‘0’ 或者 字符型数字 - 48
DOS窗口输出存储单元中的十六进制数
程序流程图
汇编代码实现
1 | mov cx,keybuf3sortedcount ;把要转换的字符串中有几位数字给cx |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小蜗!
评论
ValineDisqus