8086的编程问题(使用汇编语言)
;这个程序通过编译正确运行。
代码段
假设CS:Code,DS:Code
;-
;功能:将AX中的二进制数转换成压缩的BCD码。
;条目:AX=16位二进制数(因为最大压缩BCD码是9999H,所以AX的二进制值不能大于270FH)。
;Exit: AX=转换后压缩的BCD码。
Binary_BCD Proc Near
推送dx
推送cx
推送bx
推di
mov @@Temp_Save,0
mov @@Temp_Save[2],0;将临时双字存储单元设置为0。
mov bx,10
lea di,@@Temp_Save[3]
cld
@@Divide: xor dx,dx
分部bx
mov [di],dl;保存剩余部分
十二月二日
测试ax,0ffffh
jnz @ @除
mov cl,4
mov ax,@@Temp_Save[2]
xchg ah,al
shl al,cl
化学发光二极管
mov dl,啊
移动轴,@@Temp_Save
xchg ah,al
shl al,cl
化学发光二极管
运动al,dl
波普迪
pop bx
流行cx
流行dx
浸水使柔软
@@Temp_Save dw 2 dup(?)
Binary_BCD EndP
;-
;功能:将AX中压缩的BCD码转换成二进制数。
;条目:AX=压缩BCD码
;退出:AX= 16转换后的二进制数。
BCD_Binary Proc Near
推送dx
推送cx
推动bx
mov dx,ax
mov bx,10
mov cl,4
嘘啊,cl
xchg ah,al
字节扩展为字
推送dx
多重bx
流行dx
和dh,0fh
xchg dh,dl
推送dx
异或dh,dh
添加ax,dx
多重bx
流行dx
xchg dh,dl
异或dh,dh
推送dx
shr dx,cl
添加ax,dx
多重bx
流行dx
和D1,0fh
添加ax,dx
pop bx
流行cx
流行dx
浸水使柔软
BCD_Binary EndP
;-
开始:推送cs
流行数码相机
推送cs
pop es使数据段、附加段和代码段成为同一个段。
mov ax,3456
调用Binary _ BCD将AX中的二进制数转换成压缩的BCD码
调用BCD _ Binary将AX中压缩的BCD码转换成二进制数。
Exit_Proc: mov ah,4ch结束程序
int 21h
代码结束
结束开始;这是编译的结尾
2.附加段中有一个数组,第一个地址是BUFF,数组中的第一个字节存储数组的长度。写个程序在数组中找0,找到后从数组中删除,后续项向前压缩,剩下的用0填充。
;这个程序通过编译正确运行。
代码段
假设CS:Code,DS:Code
BUFF db 10,56,78,35,0,89,51,63,0,76,123
开始:推送cs
流行数码相机
推送cs
pop es使数据段、附加段和代码段成为同一个段。
cld
lea si,BUFF数组头地址→si
lodsb读取数组长度
异或啊,啊
推斧
pop cx数组长度→cx
find _ Zero:lodsb;数组元素被读入累加器a1
cmp al,0;是0吗?
jnz Next _ One不为0,跳到下一个元素。
;-
;找到0,从数组中删除,后续项向前压缩,其余用0填充。
推送si
波普迪
十二月二日
推di
推送cx
十二月cx
代表movsb
mov字节指针[si-1],0
流行cx
波普斯
;-
Next_One:循环Find_Zero
Exit_Proc: mov ah,4ch结束程序
int 21h
代码结束
结束开始;这是编译的结尾
3.编写一个程序统计学生的数学成绩,将学生分为90 ~99分、80 ~89分、70 ~79分、60~69分、60分以下,并将每一节的人数发送到内存单元。
;这个程序通过编译正确运行。
代码段
假设CS:Code,DS:Code
;-
;功能:输出回车和换行
进入CTLF附近
推斧
推送dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
流行dx
爆破筒
浸水使柔软
进入_CTLF终点
;-
;函数:将AL中的二进制无符号数转换成显式的十进制ASCII码。
;条目:AL=二进制数;Di=转换后的ASCII存储地址。
;退出:无
Dec_ASCII Proc附近
推送si
推送cx
推动bx
推di
mov bl,10
异或cx,cx
lea di,@@Temp_Save[3]
cld
@@Divide: xor啊,啊
div bl
或者啊,30h
mov [di],啊
十二月二日
inc cx
测试铝,0ffh
jnz @ @除
推di
波普斯
公司si
波普迪
pop bx
推di
代表movsb
mov字节指针[di],' $ '
波普迪
流行cx
波普斯
浸水使柔软
@@Temp_Save db 4 dup(?)
Dec_ASCII EndP
;-
得分db 56,69,84,82,73,88,99,63,100,80,0,10,80,100,90,73,43,60,63,72,88,42,58,99,100,89,65,61,74,84,79学校报告;副本
元素equ($-分数)/类型分数;元素数量
score _ Tab db 6 dup(0);每个分数段的计数
结果数据库' 00 - 59:'
Temp_STr db 4 dup ('$ ')
Score100 db '====100:'
开始:推送cs
流行数码相机
推送cs
pop es使数据段、附加段和代码段成为同一个段。
cld
lea si,得分;年级第一个地址
mov cx,元素;成就数量
mov dl,10;用来除10。
read _ Score:lodsb;提取结果
div dl10除外
cmp al,5;& gt5、通过考试
jg $+4
mov al,5;& lt=5,失败
sub al,5;负5,小数段计数地址偏移量。
cbw
推斧
pop bx
Inc Score _ Tab[bx];计数增加了1
循环Read _ Score循环计数下一个结果。
;显示统计结果
mov bl,59h
mov cx,5
lea si,Score _ Tab每个片段计数数组的第一个地址
lea di,临时字符串
lea dx,Resault统计结果字符串地址
列表结果:
lodsb读入计数值
调用Dec_ASCII
mov啊,9;显示统计结果
int 21h
呼叫CTLF中心
电影al,bl
添加al,1
daa
mov bl,al
推送cx
mov cl,4
异或啊,啊
化学发光二极管
施拉尔,cl
或ax,3030h
xchg ah,al
移动字指针结果,ax
电影al,bl
添加al,9
mov bl,al
异或啊,啊
化学发光二极管
施拉尔,cl
或ax,3030h
xchg ah,al
mov字指针结果[5],ax
流行cx
循环列表_结果
推送si
推di
蕾斯,得分100
莱娅·迪·雷索尔
lea cx,临时字符串
子cx,di
代表movsb
波普迪
波普斯
lodsb读入计数值
调用Dec_ASCII
mov啊,9;显示统计结果
int 21h
Exit_Proc: mov ah,4ch结束程序
int 21h
代码结束
结束开始;这是编译的结尾