实验六分支程序设计


实验1

https://blog.csdn.net/qq_16184125/article/details/72575458?

我这里先输入小写字母a,程序输出大写字母A,然后我再输入大写字母A,程序输出小写字母a

参考代码如下:

code segment
assume cs:code
start:
inchr:	mov ah,1		;输入字符
int 21h
cmp al,13		;如果是回车则结束
je exit
cmp al,30h	;如果小于30('0'),则为非法输入
jl exit
cmp al,39h	;如果输入为数字,则直接输出
jle outnum
cmp al,41h
jl exit
cmp al,5Ah	;输入为大写字母,则跳转
jle outs
cmp al,61h
jl exit
cmp al,7Ah	;输入为小写则跳转
jle outl
outnum:	sub al,30h
mov dl,al		;将数字存入dl用于输出
mov ah,2
int 21h
jmp inchr
outs:	add al,20h	;将输入的大写字母加上20h转成小写字母
mov dl,al
mov ah,2
int 21h
jmp inchr
outl:	sub al,20h	;同理,将小写字母减去20h转成大写字母
mov dl,al
mov ah,2
int 21h
jmp inchr
exit:	mov ah,4ch
int 21h
code ends
end start

实验2

https://www.omegaxyz.com/2017/05/26/assemblyexperiment6_2/

程序运行结果如下图所示

参考代码:

DATAS SEGMENT
    array  dw 1,2,3,-4,5,-6,7,-8 
DATAS ENDS
ext segment
	pdata dw 8 dup(?)
	ndata dw 8 dup(?)
	a db  30h
	b db  30h
ext ends
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,es:ext
START:
    MOV AX,DATAS
    MOV DS,AX
    mov ax,ext
    mov es,ax
    lea bx,array
    lea si,pdata
    lea di,ndata
    mov cx,8
  
T:  mov ax,[bx]
    test ax,8000h
    jz P
    mov es:[di],ax
    add a,1
    add di,2
    jmp L
 P: mov es:[si],ax
    add b,1
    add si,2 
 
 L:add bx,2
 loop T
  mov dl, a
  mov ah,2
  int 21h
  mov dl,20h
  mov ah,2
  int 21h
  mov dl, b
  mov ah,2
  int 21h   
  
    MOV AH,4CH
    INT 21H
CODES ENDS
end start

实验3

参考代码

data segment
	PTABLE dw p1,p2,p3,p4,p5,p6,p7,p8	;定义分支地址表
data ends
code segment
	assume cs:code,ds:data
start:
	mov ax,data
	mov ds,ax
	mov ah,7		;输入数字(无回显)
	int 21h
	cmp al,31h	;判断输入是否合法
	jl exit
	cmp al,38h
	jg exit
	mov dl,al		;将输入存入dl,当做提示指令输出
	mov bl,al
	sub bl,31h	;将ascii码转为数值
	shl bl,1		;此操作将bl乘2,用于指向地址表中的地址(0,2,4,6,8,a,c,e)
	jmp PTABLE[bx]	;根据地址转向对应分支
p1:	mov ah,2		;显示输入的数字,下同
	int 21h
	jmp exit
p2:	mov ah,2
	int 21h
	jmp exit
p3:	mov ah,2
	int 21h
	jmp exit
p4:	mov ah,2
	int 21h
	jmp exit
p5:	mov ah,2
	int 21h
	jmp exit
p6:	mov ah,2
	int 21h
	jmp exit
p7:	mov ah,2
	int 21h
	jmp exit
p8:	mov ah,2
	int 21h
	jmp exit
exit:	mov ah,4ch	;程序结束
	int 21h
code ends
	end start

运行结果如下

444


文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录