[实验目的]
- 熟悉8086宏汇编实验环境,包括编辑(NotePad)、汇编MASM、链接LINK、调试debug32、运行等开发环境的使用,学习简单程序调试运行。
- 熟悉微机原理,掌握8086/8088CPU内部结构,熟悉8086/8088指令系统。
- 熟练掌握汇编语言程序设计方法,通过本实验初步培养计算机逻辑解题能力,熟练掌握数制及其转换规则;掌握基本输入输出中断调用的方法。
[实验要求]
1.在规定期限独立完成实验内容
2.提交实验报告(电子版)
3.提交相应源程序文件
[实验内容]
- 按要求编写以下程序:各种进制数显示程序
- 1.在屏幕上显示输出一个二进制数
(1)输出一个二进制数 data segment dat1 dw 1024h data ends code segment assume cs:code,ds:data begin: mov ax,data mov ds,ax mov bx,dat1 mov cx,16 t: rol bx,1 mov dl,bl and dl,01h add dl,30h mov ah,2 int 21h loop t mov ah,4ch int 21h code ends end begin
- 2.在屏幕上显示输出一个十六进制数
(2)输出一个十六进制数 data segment dat1 dw 1024h data ends code segment assume cs:code,ds:data begin: mov ax,data mov ds,ax mov bx,dat1 mov cx,4 t: push cx mov cl,4 rol bx,cl pop cx mov dl,bl and dl,0fh add dl,30h cmp dl,39h jbe print add dl,7 print: mov ah,2 int 21h loop t mov ah,4ch int 21h code ends end begin
- 3.在屏幕上显示输出一个十进制数(无符号数显示)
(3)输出十进制 data segment dat1 dw 03fffh data ends code segment assume cs:code,ds:data begin: mov ax,data mov ds,ax mov bx,dat1 mov cx,10000 call dec_div mov cx,1000 call dec_div mov cx,100 call dec_div mov cx,10 call dec_div mov cx,1 call dec_div mov ah,4ch int 21h dec_div proc mov dx,0 mov ax,bx div cx mov bx,dx mov dl,al add dl,30h mov ah,2 int 21h ret dec_div endp code ends end begin
- 4.在屏幕上将一个数以二进制、十六进制、十进制(无符号数)分别显示输出
4)以二进制、十六进制、十进制(无符号数)分别显示输出 data segment dat1 dw 0ffffh data ends code segment assume cs:code,ds:data begin: mov ax,data mov ds,ax call bin_show call hex_show call dec_show mov ah,4ch int 21h hex_show proc mov bx,dat1 mov cx,4 t2: push cx mov cl,4 rol bx,cl pop cx mov dl,bl and dl,0fh add dl,30h cmp dl,39h jbe print add dl,7 print: mov ah,2 int 21h loop t2 ret hex_show endp bin_show proc mov bx,dat1 mov cx,16 t1: rol bx,1 mov dl,bl and dl,01h add dl,30h mov ah,2 int 21h loop t1 ret bin_show endp dec_show proc mov bx,dat1 mov cx,10000 call dec_div mov cx,1000 call dec_div mov cx,100 call dec_div mov cx,10 call dec_div mov cx,1 call dec_div ret dec_show endp dec_div proc mov dx,0 mov ax,bx div cx mov bx,dx mov dl,al add dl,30h mov ah,2 int 21h ret dec_div endp code ends end begin
- .同④,分行显示
5)以二进制、十六进制、十进制(无符号数)分行显示输出 data segment dat1 dw 0ffffh data ends code segment assume cs:code,ds:data begin: mov ax,data mov ds,ax call bin_show call crlf call hex_show call crlf call dec_show call crlf mov ah,4ch int 21h hex_show proc mov bx,dat1 mov cx,4 t2: push cx mov cl,4 rol bx,cl pop cx mov dl,bl and dl,0fh add dl,30h cmp dl,39h jbe print add dl,7 print: mov ah,2 int 21h loop t2 ret hex_show endp bin_show proc mov bx,dat1 mov cx,16 t1: rol bx,1 mov dl,bl and dl,01h add dl,30h mov ah,2 int 21h loop t1 ret bin_show endp dec_show proc mov bx,dat1 mov cx,10000 call dec_div mov cx,1000 call dec_div mov cx,100 call dec_div mov cx,10 call dec_div mov cx,1 call dec_div ret dec_show endp dec_div proc mov dx,0 mov ax,bx div cx mov bx,dx mov dl,al add dl,30h mov ah,2 int 21h ret dec_div endp crlf proc mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h ret crlf endp code ends end begin
- 6. 在屏幕上将一个数以二进制、十六进制、十进制(无符号数)分别显示输出,并统计其中二进制形式中“1”的个数并显示
6)以二进制、十六进制、十进制(无符号数)分别显示输出,并统计其中二进制形式中“1”的个数并显示 data segment dat1 dw 03fffh cn dw ? data ends code segment assume cs:code,ds:data begin: mov ax,data mov ds,ax mov bx,dat1 call bin_show call crlf mov bx,dat1 call hex_show call crlf mov bx,dat1 call dec_show call crlf call count1 mov bx,cn call dec_show mov ah,4ch int 21h hex_show proc mov cx,4 t2: push cx mov cl,4 rol bx,cl pop cx mov dl,bl and dl,0fh add dl,30h cmp dl,39h jbe print add dl,7 print: mov ah,2 int 21h loop t2 ret hex_show endp bin_show proc mov cx,16 t1: rol bx,1 mov dl,bl and dl,01h add dl,30h mov ah,2 int 21h loop t1 ret bin_show endp dec_show proc mov cx,10000 call dec_div mov cx,1000 call dec_div mov cx,100 call dec_div mov cx,10 call dec_div mov cx,1 call dec_div ret dec_show endp dec_div proc mov dx,0 mov ax,bx div cx mov bx,dx mov dl,al add dl,30h mov ah,2 int 21h ret dec_div endp count1 proc mov dx,0 mov bx,dat1 mov cx,16 t: shl bx,1 jnc next inc dx next: loop t mov cn,dx ret count1 endp crlf proc mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h ret crlf endp code ends end begin
[运行结果]