因为这些题目是我自己写的,可能会有一些错误,希望不要嫌弃
目录
分支程序设计
小写转换为大写
问题描述
1、内存有一个字节变量VAL中存放着小写字符’a’,请将该字符转换为大写字符并在屏幕中显示出来(要求在debug中调试出该程序)。
代码实现
assume cs:code
data segment
VAL db 'a'
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,offset VAL
mov al,ds:[si]
and al,11011111b
mov dl,al
mov al,0
mov ah,02h
int 21h
mov ax,4c00h
int 21h
code ends
end start
正数负数分别存放
问题描述
2、设存储单元A和B各有一带符号字节数,比较大小和正负,要求将较大数送RES1单元;如果有负数,将一个负数送RES2,否则RES2送-1(要求在debug中调试出该程序)。
代码实现
assume cs:code
data segment
A db -7
B db 10
RES1 db ?;占位
RES2 db ?
data ends
stack segment;设立一个堆栈
db 16 dup(0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
lea si,A;把A的偏移地址给si
mov al,ds:[si];把A中的数值送到寄存器al中
lea si,B
mov bl,ds:[si]
cmp al,bl
jl n1;如果al中的数值小于bl中的数值,跳转到n1
cmp al,bl
jg n2;如果al中的数值大于bl中的数值,跳转到n2
cmp al,bl
je n1
n1: lea si,RES1
mov ds:[si],bl;因为bl中的值大,所以将值送人RES1中
jmp next;跳转
n2: lea si,RES1
mov ds:[si],al
jmp next
next: lea si,RES2;将RES2的偏移地址送入si中
push ax;因为下面要改变ax的值,所以先把值压入栈中
shl al,1;左移一位,到标志寄存器CF中
jnc next1;CF=0,如果为零,表示该值为正,跳转到next1段
pop ax;为不为零,表示为负,把ax寄存器中的数送人到RES2中
mov ds:[si],al
jmp exit
next1: push bx
shl bl,1
jnc next2;表示al和bl中的值都为正数,跳转到next2中
pop bx
mov ds:[si],bl
jmp exit
next2: mov al,-1
mov ds:[si],al;RES2送-1
jmp exit
exit: mov ax,4c00h
int 21h
code ends
end start
循环程序设计
测试字符串中是否有数字
问题描述
1、在STR到STR+99单元中存放着一个字符串,试编写程序测试该字符串中是否有数字,若有将CL置1,否则CL置0 (要求在debug中调试出该程序)
代码实现
assume cs:code
data segment
STR db 'pbcdefghij'
db 'klmnujnhbn'
db 'olknhbgvfc'
db 'olokinujm9'
db 'olkjngvdfc'
db 'plplplplpi'
db 'jkjkjkjkjk'
db 'tgtgtgtgtg'
db 'tvtvtvtvtv'
db 'ybybybybyp'
Count equ $-STR
r db ?
data ends
code segment
start: mov ax,data
mov ds,ax
mov cx,Count;可能会没输够100个数,所以在这里用了字符串的长度
lea si,STR;STR为偏移地址
s: cmp byte ptr d