微机原理软件实验程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

以符号地址NUM开始的连续存储单元中,顺序存放着16个数(请在实验中随机输入),试统计其中正数、负数及零的个数,并把它们存放在SI、DI及BX中data segment

num db 27,-9,36,-7,-14,0,8,69,-48,0,0,66,15,0,-5,71

data ends

code segment

assume cs:code,ds:data

start:mov ax,data

mov ds,ax

xor al,al

xor dx,dx ;清空,准备存负数的个数

xor di,di ;清空,准备存正数的个数

xor bx,bx ;清空,准备存0 的个数

lea si,num ;地址指针

mov cx,16

cld

check:lodsb ;取一个数据到AL

or al,al ;该数据与自身相或,影响标志位

js x1 ;如果SF=1 是负数,DI+1

jz x2 ;如果ZF=1 是0 BX+1

inc dx ;如果是正数,DX+1

jmp next

x1: inc di

jmp next

x2: inc bx

next: loop check

mov si,dx ;把正数的个数存到SI

mov ah,4ch

int 21h

code ends

end start

把从MEM1单元开始的10个无符号数94,56,78,32,86,89,91,65,73,50,按照从高到低顺序排列后,存放在MEM2开始的10个单元中

data segment

mem1 db 94,56,78,32,86,89,91,65,73,50

mem2 db 10 dup(?)

data ends

code segment

assume cs:code,ds:data,es:data

start:mov ax,data

mov ds,ax

mov es,ax ; data段的段基址既赋给ds 也赋给es

; data段既是数据段也是附加段

lea di,mem1; di指向待排序数的首地址

mov bl,9 ; 外循环次数

next1:mov si,di

mov cl,bl

next2:mov al,[si]

inc si

cmp al,[si]

jnc next3

mov dl,[si]

mov [si-1],dx

mov [si],al

next3:dec cl

jnz next2

dec bl

jnz next1 ; 以上程序完成排序

; 以下程序完成串复制,

; 把从MEM1单元开始的10个数复制到MEM2开始的10个单元中lea si,mem1

lea di,mem2

mov cl,10

rep movsb

mov ah,4ch

int 21h

code ends

end start

编写程序实现从键盘输入一个字母并显示,判断其为大写还是小写,如果是大写将其转换为小写,如果是小写转换为大写,并将转换后的结果显示出来data segment

string db 'Please input a letter:$'

data ends

code segment

assume cs:code,ds:data

main proc

start: mov ax,data

mov ds,ax

call transform

mov ah,4ch ;结束

int 21h

main endp ;主程序结束

transform proc ;子程序开始

lea dx,string

again: mov ah, 01h

int 21h ;键盘接收一个字符并显示

;大写字母的ASCII码范围41H-5AH

;小写字母的ASCII码范围61H-7AH

cmp al, 41h

jb wrong ;小于41h说明输入的不是字母,显示出错,

cmp al,5ah ;判断是否落在大写字母范围内

ja next ;没落在大写字母范围内,就需要继续判断是否在小写字母范围内

add al,20h ;若是大写字母,则改成小写字母

jmp display ;显示

next: cmp al,61h ;跟61h比较如果小于则不是字母,显示出错

jb wrong

cmp al,7ah ;再跟7ah比较,看是否落在小子字母范围内

ja wrong

sub al,20h ;将小写字母变成大写字母

jmp display

wrong: mov ah,9

int 21h

jmp again

display:mov ah,02h ;显示

mov dl,al

int 21h

ret

transform endp

code ends

end start

相关文档
最新文档