从键盘接收两个不大于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小时内删除。