微机原理 程序设计题

数字0~9、A~Z、a~z

DATA SEGMENT

INFOR1 DB 0AH, 0DH, "Please Press Any Key to input a letter :$"

INFOR2 DB 0AH, 0DH, "You Input a Lowercase Letter! $"

INFOR3 DB  0AH, 0DH, "You Input a Uppercase Letter! $"

INFOR4 DB  0AH, 0DH, "You Input a Digit! $"

INFOR5 DB  0AH, 0DH, "You Input Other Letter! $"

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX, DATA

MOV DS, AX

MOV DX, OFFSET INFOR1 ;显示信息

MOV AH, 09H

INT 21H

MOV AH, 01H             ;功能号为1的DOS功能调用实现从键盘输入一个字符

INT 21H

CMP AL,'0'

JB OTHER

CMP AL,'9'

JB DIGIT

CMP AL,'A'

JB OTHER

CMP AL,'Z'

JBE UPPER

CMP AL,'a'

JB OTHER

CMP AL,'z'

JBE LOWER

JMP PEND

LOWER: MOV DX, OFFSET INFOR2

MOV AH, 09H

INT 21H

JMP PEND

UPPER: MOV DX, OFFSET INFOR3

MOV AH, 09H

INT 21H

JMP PEND

DIGIT: MOV DX, OFFSET INFOR4

MOV AH, 09H

INT 21H

JMP PEND

OTHER: MOV DX, OFFSET INFOR5

MOV AH, 09H

INT 21H

JMP PEND

PEND: MOV AH,4CH

INT 21H

CODE ENDS

END START

字母大小写转换

 例4.14一个数据块由大写或小写的英文字母、数字和各种其他符号组成,其结束符是回车符CR(ASCII码为0DH),数据块的首地址为BLOCK1.将数据块传送到BLOCK2为首地址的内存区,并将其中所用的英文字母(a~z)转换成相应的大写字母(A~Z),其余不变

小写字母61H~7BH

LEA SI,BLOCK1
LEA DI,BLOCK2
CLD
NEXT:
LODSB
CMP AL.0DH           ;是否是回车符
JZ DONE
CMP AL,61H           ;是都小于'a'
JC OK
CMP AL,7BH           ;是否大于'z'
JNC OK               ;是,跳转Ok
SUB AL,20H           ;否则,AL减20
OK:
STOSB
JMP NEXT
DONE:
HLT

字符串传送、比较

 例4.15比较两个字符串,找出其中第一个不相等字符的地址。如果两个字符全部相同,则转到ALMATCH进行处理。这两个字符串长度均为20,首地址分别为STRING1何STRING2

LEA SI,STRING1
LEA DI,STRING2
MOV CX,20
CLD
REPE CMPCB
JZ ALLMATCH
DEC SI
DEC SI
HLT
ALLMATCH:
MOV SI,0
MOV DI,0
HLT

最大值、最小值

从内存数据段的xx单元开始连续存放有10个字节型无符号数,要求从中找出最大者送入yy单元中

已知内存SCORE单元中存有10个学生的考试成绩,分别为53,49,67,91,85,83,74,69,95,86。试编写程序,将最低分存入MIN单元内

DATA SEGMENT

        xx DB 73,59,45,81,107,37,25,14,64

        yy DB ?

DATA ENDS

CODE SEGMENT

        ASSUME CS:CODE,DS:DATA

START:

        MOV AX,DATA

        MOV DS,AX
   MOV BX,OFFSET XX

   MOV AL,[BX]

   MOV CL,9

AGAIN:

   INC BX

   CMP AL,[BX]

   JA NEXT

   MOV AL,[BX]

NEXT:

   LOOP AGAIN

   MOV yy,AL
 MOV AH,4CH

        INT 21H

END CODE

        END START

以DATA1为首地址的内存数据段存放了10个16位带符号数,将其中最大值和最小值找出,并分别存入MAX和MIN

data segment
data1 dw 356,-124,9,12,-43,-88,67,42,99,-20
max dw 0
miu dw 0
ends

stack segment
dw   128  dup(0)
ends

code segment
start:

mov ax, data
mov ds, ax
mov es, ax

lea si,data1
mov cx,9
cld
lodsw
mov max,ax
mov miu,ax
next:
lodsw
cmp ax,max
jg greater
cmp ax,miu
jl less
jmp goon
greater:
mov max,ax
jmp goon
less:
mov miu,ax
goon:
loop next
hlt

mov ax, 4c00h 
int 21h
ends

end start 

 在数据段从MYDATA开始的存储单元中分别存放了两个8位无符号数,试比较它们的大小,并将大者传送到MAX单元

data segment
mydata db 23h,89h
max db 10 dup(0)
ends

stack segment
dw   128  dup(0)
ends

code segment
start:
mov ax, data
mov ds, ax
mov es, ax


lea bx, mydata
mov al, [bx]
inc bx
cmp al,[bx]
jnc done
mov al,[bx]
done:   mov max,al
hlt



mov ax, 4c00h 
int 21h
ends

end start 

求和

 例4.4计算两个多字节十六进制数之和:3B74AC0F8H+20D59E36C1H=?

被加数和加数均有5个字节,利用循环

MOV CX,5
MOV SI,0
CLC
LOOPER:
MOV AL,DATA2[SI]
ADC DATA1[SI],AL
INC SI
DEC CX
JNZ LOOPER
HLT

累加和

从偏移地址为TABLE开始的内存单元中,存放着100个字节型数据

LEA BX,TABLE
MOV CL,100
XOR AX,AX
LOOPER:
ADD AL,[BX]
JNC GOON
INC AH
GOON:
INC BX
DEC CL
JNZ LOOPER
MOV SUM,AH
HLT

统计字符个数

如果要取出的指令位于物理地址389F2H且CS=2700H,请问代码段范围是否能覆盖到该指令?如果不能,在IP的取指必须是1282的情况下,应该给CS赋什么数值?

不能

3777H

求变量data1中“1”的个数,并置入count中

data segment
data1 db 00040h,0046h
data2 db 0075h,0038h
sum db 2dup(0)
ends

stack segment
dw   128  dup(0)
ends

code segment
start:
mov ax, data
mov ds, ax
mov es, ax

; add your code here
lea si,data1
lea bx,data2
lea di,sum
mov cx,4
clc
next:   mov al,[si]
adc al,[bx]
aaa
mov [di],al
inc si
inc bx
inc di
dec cx
jnz next
hlt



mov ax, 4c00h 
int 21h
ends

end start

如果CS=1296H,IP=100H

(1)逻辑地址

(2)物理地址

(3)代码段的上限和下限

1296H

12960H

上限12A60H

下限12A6FH

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值