- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
试验五循环程序设计
实验五 循环程序设计
一、试编制一程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是空格符,则退出程序;如果是空格符,则开始接收键入的字符并顺序存放在首地址为BUUFER的缓冲区中(空格不保存),直到接收到第二个空格为止。
datarea segment
rl db 0dh,0ah,$
buffer db 80 dup(?),’$’
flag db ?
datarea ends
progname segment
assume cs:progname,ds:datarea
main proc far
start: push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
lea bx,buffer
mov flag,0
next:mov ah,01
int 21h
test flag,01h ;是第一个字符吗?标志单元为1,表示输入的不是第一个字符
jnz follow ;不是第一个字符则转。。
cmp al,20h ;第一个字符是空格吗?
jnz exit ;第一个字符不是空格则退出
mov flag,1 ;第一个字符是空格标志单元置1
jmp next ;等待输入下一个字符
follow:cmp al,20h ;非第一次输入的字符是空格吗?
jz disp ;exit ;
mov[bx],al ;不是空格,则将输入的字符保存到首地址为BUFFER的缓冲区。
inc bx
jmp next
disp:lea dx,rl
mov ah,9
int 21h
lea dx,buffer
mov ah,9
int 21h
exit:ret
main endp
progname ends
end start
二、从键盘输入两个十进制数,转换成二进制数进行加法运算,两数相加的结果输出在屏幕上. (空格或逗号作为两数的的分隔符).
data segment
bini dw ?
result dw ?
decasc db 5 dup(?)
flag db 0
data ends
code segment
assume cs:code,ds:data
main proc far
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov bx,0 ;BX中保存转化的中间结果,初始BX=0.(((Di*10)+Di-1)*10+......+D0)
new: mov flag,0
newchar:mov ah,1
int 21h ;等待键盘输入
push ax
sub al,30h ;
jl s1 ;输入字符小于零,为非0-9的数,则转移
cmp al,9
jg s1 ;输入字符大于9,为非0-9的数,则转移
cbw ;将AL中的字节字符扩展到AX为字
xchg ax,bx ;AX和BX中的数进行交换(原AX中为Di-1,BX中为Di)
mov cx,10 ;
mul cx ;
xchg ax,bx ;乘十后的结果交换到BX中,既为(Di*10)
add bx,ax ;作((Di*10)+Di-1)运算,结果在BX中
jmp newchar ;转等待键盘输入
s1: pop ax
cmp flag,1 ;标志位为1吗?
jz add1 ;为1转
cmp al,20h
jz sf ;是空格转
cmp al,,
jnz sbini ;
sf: mov bini,bx ;
mov flag,1 ;置标志位
mov bx,0
jmp newchar ;
add1: add bx,bini
sbini: mov result,bx;保存二进制数结果到内存单元
mov ax,0000h
;******************************************************************
binidec:mov dx,result ; 将二进制数取到DX中,准备转换成十进制ASCAII码
mov si,offset decasc-1;
skip:inc si
mov ax,dx ;把要转换的二进制数送到AX
mov dx,0000h
mov cx,10
div cx ;AX中的二进制数除以十
xchg ax,dx ;将余数从DX中交换到AX中,而商交换到DX中
add al,30h ;转换成ASCAII码
mov [si],al ;保存一位十进制ASCAII码
cmp dx
文档评论(0)