正在加载图片...
hinapub.com 第2章操作系统 233 下载 字节以后,把接管开关设置为OFF,复位开关设置为OFF,则微处理器开始执行程序。 这就是如何向刚刚从头建成的计算机中输入第一个机器码程序的过程,不用说,这是很 费事的。 又是什么改变了这一切,使得人们乐于在视频显示器前查看自己程序的执行结果呢?在 上一章中已经讲到,只显示字符的视频显示器有IKB的随机访问存储器用来存放25行,每行 40个字符的ASCI码。程序把内容写入到该存储器中,方法与写入到计算机中其他存储器中的 方法一样。 然而,把程序的输出显示到视频显示器并不是那么简单。例如,如果一段程序,执行结 果是4Bh,则不能简单地把这个值写入视频显示器的存储器中。如果这样做,屏幕上将会看到 的是字符K,因为该字符对应的ASCI码是4Bh。正确的是应写两个ASCI码字符到显示器: 34h(是4的ASCI码)和42h(是B的ASCI码)。8位的计算结果每半个字节是一个十六进制数 字,该数字必须通过对应的ASCI来显示 当然,也可以写一段小的子程序来完成这种转换。下面的一段8080汇编语言程序用来把 十六进制数中的一位转换成对应的ASCI码(假定包含的十六进制数范围从00h~0Fh) Nibb1 eToAscii:cMPA,0Ah; check if it'sa1 etter or number(判断是数字还是字母) ADDA,37h; A to converted to41hto46h(把A~F转换成41h~46h) RET ADD A, 30h 0to9 converted to30hto39h(把0~9转换成30h~39h) 下面的子程序调用 Nibble toascii两次,把累加器A中的一个字节转换成两个ASCI码数字, 并放在寄存器B和C中 PUSH PSW ; Save accumulator(保存A) RRC A右移4次.) RRC to get high- order nibble(取高半字节) CALL NibbleToAscii; Convert to Ascii code(转换成ASCI码) MOV B,A M。 ve result to register B(结果放入寄存器B) ; Get origina1 A back(取出原来的A AND A, OFh ;Get1ow- order nibble(取低半字节) CALL NibbleToAsci Convert to AscIi code(转换成ASCI工码) MOV C,A ; Move result to register c(结果放入寄存器c) 这些子程序使得可以在视频显示器中按十六进制来显示一个字节。如果要转换成十进制 再做一些工作即可。此过程与把十六进制数转换成十进制数的方法非常相似一用10来除几 次即可。 记住,还没有把这些汇编语言程序输入到内存中。也许,你已经把它们写到了纸上并且 转换成了机器码,然后再输入到内存中。这种“手工汇编”是第24章要讲的内容。 尽管控制面板不需要许多硬件,但却不容易使用。它所采用的输入/输出方法是最坏的方 既然聪明到可以从零开始来制造自己的计算机,却还用数字0和1来作为按键,的确令人字节以后,把接管开关设置为 O F F,复位开关设置为O F F,则微处理器开始执行程序。 这就是如何向刚刚从头建成的计算机中输入第一个机器码程序的过程,不用说,这是很 费事的。 又是什么改变了这一切,使得人们乐于在视频显示器前查看自己程序的执行结果呢?在 上一章中已经讲到,只显示字符的视频显示器有 1 K B的随机访问存储器用来存放 2 5行,每行 4 0个字符的A S C I I码。程序把内容写入到该存储器中,方法与写入到计算机中其他存储器中的 方法一样。 然而,把程序的输出显示到视频显示器并不是那么简单。例如,如果一段程序,执行结 果是4 B h,则不能简单地把这个值写入视频显示器的存储器中。如果这样做,屏幕上将会看到 的是字符 K,因为该字符对应的 A S C I I码是4 B h。正确的是应写两个 A S C I I码字符到显示器: 3 4 h(是4的A S C I I码)和4 2 h(是B的A S C I I码)。8位的计算结果每半个字节是一个十六进制数 字,该数字必须通过对应的 A S C I I码来显示。 当然,也可以写一段小的子程序来完成这种转换。下面的一段 8 0 8 0汇编语言程序用来把 十六进制数中的一位转换成对应的 A S C I I码(假定包含的十六进制数范围从 0 0 h~0 F h): NibbleToAscii: CMP A,0Ah ;Check if it’s a letter or number (判断是数字还是字母) JC Number ADD A,37h ;A to F converted to 41h to 46h(把A~F转换成41h~46h) RET Number: ADD A,30h ; 0 to 9 converted to 30h to 39h(把0~9转换成30h~39h) RET 下面的子程序调用N i b b l e To A s c i i两次,把累加器A中的一个字节转换成两个A S C I I码数字, 并放在寄存器B和C中: ByteToAscii: PUSH PSW ;Save accumulator(保存A) RRC ;Rotate A right 4 times...(A右移4次...) RRC RRC RRC ;...to get high-order nibble(取高半字节) CALL NibbleToAscii;Convert to ASCII code(转换成ASCII码) MOV B,A ;Move result to register B(结果放入寄存器B) POP PSW ;Get original A back(取出原来的A) AND A,0Fh ;Get low-order nibble(取低半字节) CALL NibbleToAscii ;Convert to ASCII code(转换成ASCII码) MOV C,A ;Move result to register C(结果放入寄存器C) RET 这些子程序使得可以在视频显示器中按十六进制来显示一个字节。如果要转换成十进制, 再做一些工作即可。此过程与把十六进制数转换成十进制数的方法非常相似—用1 0来除几 次即可。 记住,还没有把这些汇编语言程序输入到内存中。也许,你已经把它们写到了纸上并且 转换成了机器码,然后再输入到内存中。这种“手工汇编”是第 2 4章要讲的内容。 尽管控制面板不需要许多硬件,但却不容易使用。它所采用的输入 /输出方法是最坏的方 法。既然聪明到可以从零开始来制造自己的计算机,却还用数字 0和1来作为按键,的确令人 第22章 操 作 系 统 233 下载
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有