您的位置:首页 > 其它

汇编学习---分支结构程序设计

2012-01-05 16:13 302 查看
   题目要求:

编写汇编程序实现从键盘输入一个数字,然后判断其奇偶性;如果为奇数,则在屏幕输出1,否则输出0.
题目分析:
此题为典型的分支结构程序,主要要解决以下几个难点:

接受用户的输入  (调用DOS中断的01H号功能实现)
奇偶数的判断      (利用RCR循环右移一位得到输入数值的最低位,判断是0还是1)
根据奇偶数条件的跳转
条件输出     (调用DOS中断的02H号功能实现)
代码实现:
code segment
assume cs:code
start:
mov ah,01h		;调用DOS中断的01号功能,输入字符,存储于al中
int 21h
cmp al,'0'		;输入字符存在al寄存器中,使其与0比较
jb start		;如果其asc码比'0'小,则继续输入
cmp al,'9'		;与9比较
ja start		;如果比输入的asc码比'9'还大,则继续输入
clc			;CF标志清零
rcr al,1		;将al的低1位右移出道cf中
jnc EVE		;如果cf!=1,则判断此数为偶数,则跳转到偶数的操作
mov al, 31h	;如果没有跳转,则为奇数,则输出字符为1,及其asc码为31H
jmp DISP		;强制跳转到输出分支
EVE:
mov al,30h		;0的asc码为30H
DISP:
mov ah,02h		;调用DOS中断的02H功能,实现输出字符
mov dl,al		;输入字符即为al,将其赋值给dl寄存器,输出
int 21h
mov ax,4c00h
int 21h
code ends
end start


代码不足:
字符输入输出显示格式比较丑陋,且不友好,可以考虑添加回车加换行等。

————————————————————————————————

题目要求:
利用汇编代码实现一个dos功能菜单
题目分析:
主要难点在于字符串输出,字符的输入;解决办法,可以调用dos中断的09H功能输出字符串,01H号功能输入字符。
代码实现:
data segment

     MENU  db 'Action: ',0dh,0ah;提示信息准备


        db 'This is a washing machine!',0dh,0ah

        db 'You can use the MENU to choose function!',0dh,0ah

        db '----------------------------------------',0dh,0ah

        db '1.open the cap of washing machine ! ',0dh,0ah

        db '2.close the cap !',0dh,0ah

       
db '3.set washing time !' ,0dh,0ah


        db '4.start the washing machine !',0dh,0ah
        db '5.stop the washing machine !',0dh,0ah

        db '6.quit !',0dh,0ah

       db '----------------------------------------',0dh,0ah,'$'

     INPUT  db 'input your choose: $'


F1   db 0dh,0ah,'cap opened, clothes puted in !',0dh,0ah,'$'

F2   db 0dh,0ah,'cap closed !',0dh,0ah,'$'

F3   db 0dh,0ah,'set washing time to 5 min!',0dh,0ah,'$'

F4   db 0dh,0ah,'washing machine has started',0dh,0ah,'$'

F5   db 0dh,0ah,'succeed in washing the clothes !',0dh,0ah,'$'

F6   db 0dh,0ah,'quitd! thanks to using this washing machine !',0dh,0ah,'$'

F7   db 0dh,0ah,'no this choose ,please reinput your choose !',0dh,0ah,'$'

data ends

code segment


assume cs:code,ds:data

start:


mov ax,data

mov ds,ax

 


mov ah,09h;调用09H号功能输出MENU信息。

mov dx,offset MENU

int 21h

 INP:

          mov dx,offset INPUT ;调用09H号功能输出提示信息INPUT


int 21h

mov ah,01h;调用01H号功能输入用户的选择

int 21h

 


cmp al,'1';根据用户的输入,实现对应的输出

jz W1

cmp al,'2'

jz W2

cmp al,'3'

jz W3

cmp al,'4'

jz W4

cmp al,'5'

jz W5

cmp al,'6'

jz W6

jmp W7

  W1:


mov ah,09h

mov dx,offset F1

int 21h

jmp INP

  W2:


mov ah,09h

mov dx,offset F2

int 21h

jmp INP

  W3:


mov ah,09h

mov dx,offset F3

int 21h

jmp INP

  W4:


mov ah,09h

mov dx,offset F4

int 21h

jmp INP

  W5:


mov ah,09h

mov dx,offset F5

int 21h

jmp INP

  W6:


mov ah,09h

mov dx,offset F6

int 21h

jmp STOP

  W7:

         mov ah,09h


mov dx,offset F7

int 21h

jmp INP

STOP:
 


mov ax,4c00h

int 21h

code ends
         end start


代码说明:
本代码是通过模拟一个洗衣机的使用来实现模拟一个DOS下的功能菜单的实现。
代码结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息