汇编上机实验
- 格式:doc
- 大小:49.00 KB
- 文档页数:11
从键盘接收两个不大于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 中。
编程提示:
数据段定义应包含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 ;输入字符串