注册 登录
编程论坛 汇编论坛

编程实现从键盘输入一个字符,判断其是否为大写字母,若是大写字母,在输出"Y",否则输出"N"

qiuqiu6621 发布于 2015-06-16 16:37, 10175 次点击
求教啊
9 回复
#2
取名字2015-06-17 12:09
楼主简单看一下王爽的汇编语言就会做了
#3
hu9jj2015-06-18 07:30
看看你的教材,肯定会有类似的例子的。
#4
hu9jj2015-06-20 07:47
一般来说,对于这种应付作业的求助贴,回应的人不多。如果是需要思路或者是有不清楚的代码来提问,回应的人就大不一样了。
#5
zklhp2015-06-22 17:52
越来越冷清了
#6
hjx11202015-06-22 18:36

奇了怪了,好几个论坛看到这个类似的问题
#7
wfoo2015-06-23 11:29
给楼主一个建议,程序全部用c语言写,然后用gcc -S把它生成汇编代码,这样会容易很多。楼主的问题有2个难点,要实现键盘的读和屏幕的写。如果没有操作系统可能很简单。否则
在liunx下应该可以用系统调用read,write,只不过要把输入流的行缓存关掉。实现read,write也很简单,内联汇编或直接汇编,好像有sysenter,syscall或者int $0x80这样的指令。
实现read,write还有个方法直接操作相应的寄存器,访问外设要么是使用内存映射,要是用in,out指令访问,还有可以能是通过访问pci总线上的某个芯片来控制这个外设。
#8
zklhp2015-06-23 11:45
以下是引用wfoo在2015-6-23 11:29:04的发言:

给楼主一个建议,程序全部用c语言写,然后用gcc -S把它生成汇编代码,这样会容易很多。楼主的问题有2个难点,要实现键盘的读和屏幕的写。如果没有操作系统可能很简单。否则
在liunx下应该可以用系统调用read,write,只不过要把输入流的行缓存关掉。实现read,write也很简单,内联汇编或直接汇编,好像有sysenter,syscall或者int $0x80这样的指令。
实现read,write还有个方法直接操作相应的寄存器,访问外设要么是使用内存映射,要是用in,out指令访问,还有可以能是通过访问pci总线上的某个芯片来控制这个外设。

楼主要是这么弄就更麻烦了
#9
wfoo2015-06-23 12:12
回复 10楼 zklhp
我上面说的是基于操作系统,如果没有操作系统可以直接用bios中断,在操作系统上部调用现成的库函数,我想不到其他办法来实现键盘的读和屏幕的写。
即使是无操作系统化,用c语言我觉得很方面。只要用汇编或内联汇编用实现一个调用bios中断的函数,比用汇编要简单的多,也不容易出错得多。

void bios_call(int no, const struct regs *in, struct regs *out)
{
    __asm__("int *%8" : "=a"(out->rax), “=b"(out->rbx), "=c"(out->rcx), "=d"(out->rdx)
                     : "0"(in->rax),   "1"(in->rbx),    "2"(in->rcx),   "3"(in->rdx), "r"(no));
}
#10
zhulei19782016-04-11 07:04
比较用cmp指令,输出用10H的功能9
1