从键盘接收两个不大于5 的十进制数字,并以十进制数据形式显示其和。
编程提示:
该程序中要求的均为一位数据的输入输出,暂时不考虑多位数据,请输入0~5 之间的数据,显示的结果为0~9。请不要输入两个5,以免出现不能直接输出的情况。
data segment
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov ah,01h
int 21h
mov bl,al
sub bl,30h ;将输入的数字变成16进制数后放在bl中
;为了实现bl与cl的16进制数相加
mov dl,10 ;换行(10表示换行)
mov ah,02h
int 21h
;mov dl,13 ;回车(13表示回车,为的是让换行之后光标移到行首)
;mov ah,02h
;int 21h
mov ah,01h
int 21h
mov cl,al
sub cl,30h;将输入的数字变成16进制数后放在cl中
mov dl,10
mov ah,02h
int 21h
;mov dl,13
;mov ah,02h
;int 21h
add cl,bl
add cl,30h
mov dl,cl
mov ah,02h
int 21h
mov ax,4c00h
int 21h
code ends
end start
1、试编写程序,完成下面公式的计算。
A ←(X-Y+24)/ Z的商,B ←(X-Y+24)/ Z的余数
其中,变量X和Y是32位有符号数,变量A、B、Z是16位有符号数。
DATA SEGMENT
X DD 12345H
ORG 10H
Y DD 12345H
ORG 20H
Z DW 12H
ORG 30H
A DW ?
B DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,WORD PTR X ;将X低四位放入AX中
MOV DX,WORD PTR X+2 ;将X高四位放入DX中
SUB AX,WORD PTR Y ;X和Y的低四位相减(不考虑借位)
SBB DX,WORD PTR Y+2 ;X和Y的高四位相减(考虑借位)
ADD AX,24
ADC DX,0 ;只是将进位 加入到DX中
IDIV Z
MOV A,AX ;存放商到A
MOV B,DX ;存放余数到B
MOV AX,4C00H
INT 21H
CODE ENDS
END START
2 、试将字节数据B1 拆分成两个半字节数据,分别存放于其后两个单元X 和Y 中。 16进制字符串转16进制数组
编程提示:
数据段定义应包含B1、X、Y 三个变量,其中B1 变量自定义具体的数值,X、Y 变量的数值由程序赋值,分别是B1 的高低半个字节。该程序中需要使用逻辑操作完成半字节数据的拆分。
DATA SEGMENT
B1 DB 12H
X DB ?
Y DB ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV AL,B1
MOV CL,4
SHR AL,CL
MOV X,AL
MOV AL,B1
AND AL,0FH
MOV Y,AL
MOV AX,4C00H
INT 21H
CODE ENDS
END START
1、试编写程序,完成以下功能。
(1)程序执行时,显示提示信息“Please input a string(length<9):”,由用户输入一个长度小于9的字符串;
(2)然后显示提示信息“Please input the index of the char to display:”,请用户指定该串中的某个字符的位置号;
(3)程序将用户指定位置的字符显示出来。
例如:用户输入一个字符串“ABCDEFG”,然后指定的位置号为2,则屏幕显示字符“C”。注意:这里的位置号从0开始。
注意:以上功能的实现不要求程序做控制判断,在字符串输入时,由人为控制字符串长度小于9;在指定位置号时,由人为控制输入的位置号是合法的。
2、试使用分支结构和循环结构程序完善上面的程序功能。
(1)对用户输入的字符串进行长度检查,若长度大于9,则要求用户重新输入;
(2)用户在指定位置号时,进行判断,若输入非法(位置号大于实际字符串长度),则提示用户重新输入;
(3)统计用户输入的字符串中特定字符的数目并显示。可先指定特定字符进行统计,然后再由用户指定字符进行统计。
DATA SEGMENT
INMESS DB "Please input a string(length<9):$"
TIPSMESS DB "Please input the index of the char to display:$"
STR1 DB 20,?,20 DUP('$')
X DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:MOV AX,DATA
MOV DS,AX
L1: LEA DX,INMESS
MOV AH,09H
INT 21H;提示输入字符串
LEA DX,STR1
MOV AH,0AH
INT 21H ;输入字符串
MOV DL,10
MOV AH,02H
INT 21H
MOV DL,13
MOV AH,02H
INT 21H ;换行回车
CMP STR1+1,8
JA L1;比较输入的字符串长度是否大于8
L2: LEA DX,TIPSMESS
MOV AH,09H
INT 21H ;提示输入位置
MOV AH,01H
INT 21H ;输入位置
SUB AL,30H
MOV CL,AL
MOV DL,10
MOV AH,02H
INT 21H
MOV DL,13
MOV AH,02H
INT 21H ;换行回车
mov bl,str1+1
DEC bl
CMP CL,bl
JA L2;判断指定位置是否超出
MOV BL,CL
MOV BH,0
MOV AL,STR1[BX+2]
MOV DL,AL
MOV AH,02H
INT 21H
mov dl,10
mov ah,02h
int 21h
mov ah,01h
int 21h
XOR CX,CX
MOV CL,str1[1]
MOV BX,-1
MOV DL,0
l3: inc bx
cmp al,str1[bx+2]
jnz l4
inc dl
l4:
LOOP l3
ADD DL,30H
MOV CL,DL
MOV DL,0AH ;回车换行
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,CL
MOV AH,2
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
实验四:
1、已知无符号字数组LIST 的第一个字数据为其元素个数,其后数据按由小到大的顺序保存。试将某无符号字数据X 插入数组LIST 的正确位置,并修改元素个数。
编程提示:
该程序中要将X 插入递增数组,需要和数组中每一个数据值进行大小比较,到合适位置保存X。
数据比较的方式:
(1)从前向后比较:到小于X 的数据后,移动该数据及其后面的所有元素,将X 存放到腾出的单元中;
(2)从后向前比较:到大于X 的数据后,直接将该数据向后移动一个数据的位置, 直到到小于X 的数据,将X 保存到当前空出位置上
程序如下:
DATA SEGMENT
LIST DW 5,12,13,15,16,17
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论