编辑: 于世美 | 2019-07-03 |
This program is to chang a radix of sixteen into that of two ;
Programmer: ;
Date:2005.11.4 .model small .data opand DB
4 DUP(?) ;
开辟存储空间 error DB '
Please input the right radix of sixteen$'
.code main PROC FAR start: MOV AX,@data ;
数据段地址赋给AX MOV DS,AX ;
数据段地址赋给DS again: MOV SI,0 ;
清空SI next: MOV AH,01h ;
带回显字符输入功能号赋给AH INT 21h CMP AL,30h ;
输入数字与0比较 JB print_error ;
小于则输出错误信息 CMP AL,39h ;
输入数字与9比较 JA other ;
大于则跳转到other JMP store ;
小于等于则存储 other: CMP AL,61h ;
与字符'
a'
比较 JB print_error ;
小于则输出错误信息 CMP AL,66h ;
与字符'
f'
比较 JA print_error ;
大于则输出错误信息 SUB AL,07h ;
小于等于则减7,使后四位成为9以上十六进制数的二进制表示 store: MOV opand[SI],AL ;
把AL中的数赋给开辟的数据空间 INC SI ;
SI自增 CMP SI,4 ;
SI做为循环控制变量,因只输入4位十六进制数 JB next ;
小于则继续输入 CALL erlf ;
换行 XOR SI,SI ;
SI清空 loop1: MOV CH,0 MOV CL,4 SHL opand[SI],CL ;
opand[SI]中的数据逻辑左移4位,把第四位数移到高4 ;
位上来 loop2: SHL opand[SI],1 ;
逻辑左移一位,将一位二进制数移出 JNC print_zero ;
如果是0则跳转到输出'
0'
的模块 MOV DL,31h ;
如果是1,则把字符'
1'
的ASCII码赋给DL JMP print ;
进行输出操作 print_zero: MOV DL,30h ;
把字符'
0'
的ASCII码赋给DL print: MOV AH,02h ;
赋AH字符输出功能号 INT 21h INC CH CMP CH,4 JB loop2 INC SI CMP SI,4 MOV AH,02h MOV DL,20h INT 21h JB loop1 JMP exit print_error: CALL erlf MOV AH,09h ;
赋AH字符串输出功能号 MOV DX,OFFSET error ;
把字符串的偏移地址赋给DX INT 21h CALL erlf JMP again exit: MOV AH,07h INT 21h MOV AX,4c00h INT 21h main ENDP erlf PROC NEAR MOV AH,02h MOV DL,0ah ;
赋换行ASCII码INT 21h MOV AH,02h MOV DL,0dh ;
赋回车ASCII码INT 21h RET erlf ENDP END start 实验总结 通过这个实验,我对汇编指令的使用有了更进一步的了解,同时也进一步熟知了汇编程序应该怎样去思考,应该怎样合理的使用仅有的几个寄存器.在对数据段中数据的寻址过程中,对指令中的寻址方式有了更清楚的了解,知道对存储器中不同存放方式的数据应该采取怎样的寻址方式.在这个实验中,我使用的是精简段定义,了解了汇编程序另外一种书写形式,同时还使用了子程序,初步了解了如何在主程序中调用子程序. 该程序逻辑上的思考量不大,十六进制转换成二进制,只要将一位十六进制数用四位二进制数输出即可.难点在于如何完成汇编程序的输入和输入功能,最主要的是要清楚从键盘输入的数不是数值型的而是字符型的,存入的编码是ASCII码,而不是其对应的二进制数码.因而存储时需要把ASCII码转换成相对应的数码,然后再进行存储.而输出时也要进行转换,不要把其数码直接输出,而是要转换成其相对应的ASCII码后,再进行输出操作. 实验三 实验目的 初步了解如何实现程序的调用 了解如何构造程序的模块化 实验内容和分析 从键盘输入一串字符,通过程序计算出其中非数值字符的个数. 在程序中开辟一个缓冲区,用来存储从键盘输入的一串字符,每一串字符以字符'
$'
做为结束符.若按回车键,则接着输入下一个字符串,若按esc键,则结束输入,程序转入统计阶段,此时主程序将调用统计子程序,对统计输入的字符串中的非数值字符的个数,并将非字符个数打印到显示器输出. 程序代码 .model small .data buffer db