【无标题】

5-1

DSEG    SEGMENT
A       DB  5
B       DB  -6
C       DB  30
DSEG    ENDS

CSEG    SEGMENT
        ASSUME  DS:DSEG,CS:CSEG
START:
        MOV     AX,DSEG
        MOV     DS,AX
        MOV     ES,AX
        
        MOV     AL,A
        MOV     AH,0
        IMUL    B
        MOV     CX,AX
        MOV     DX,BX
        
        MOV     AL,C
        MOV     AH,0
        CWD
        ADD     AX,CX
        ADC     DX,BX
        
        SUB     AX,70
        SBB     BX,0
        
        IDIV    A
        
        MOV     [1000H],AX
        MOV     [1001H],DX
        
        MOV     AH,4CH
        INT     21H
CSEG    ENDS
END     START

5-2

DSEG    SEGMENT
RESULT  5      DUP(?)
DSEG    ENDS

CSEG    SEGMENT
        ASSUME  DS:DSEG,CS:CSEG
START:
        MOV     AX,DSEG
        MOV     DS,AX
        MOV     ES,AX     
        
        MOV     DX,0000H
        MOV     AX,65535
        MOV     CX,10000   
        DIV     CX
        MOV     RESULT,AL
        
        MOV     AX,DX   
        MOV     DX,0000H
        MOV     CX,1000
        DIV     CX
        MOV     RESULT+1,AL
        
        MOV     AX,DX   
        MOV     DX,0000H
        MOV     CX,100
        DIV     CX
        MOV     RESULT+2,AL
        
        MOV     AX,DX    
        MOV     DX,0000H
        MOV     CX,10
        DIV     CX
        MOV     RESULT+3,AL
        
        MOV     RESULT+4,DL
        
        MOV     AH,4CH
        INT     21H
CSEG    ENDS
END     START
        

6


DSEG    SEGMENT
DATA    DW  0201H,0403H,0605H,0807H,0A09H,0C0BH,2323H,7788H,3456H, 1234H
NUM     DW  10
DISP    DW  18
SOUR    DW  4010H
DEST    DW  4000H
DSEG    ENDS 

CSEG    SEGMENT
        ASSUME  DS:DSEG,CS:CSEG
START:
        MOV     AX,DSEG
        MOV     DS,AX
        MOV     ES,AX
        
        MOV     CX,NUM
        LEA     SI,DATA
        MOV     DI,SOUR
        CLD     
        REP     MOVSW
        
        MOV     CX,NUM
        MOV     SI,SOUR
        MOV     DI,DEST
        CMP     SI,DI
        JA      NEXT        ;SI>DI跳
        
        STD
        ADD     SI,DISP 
        ADD     DI,DISP
        
NEXT:   REP     MOVSW

        MOV     AH,4CH
        INT     21H
CSEG    ENDS
END     START

7-1

DSEG    SEGMENT
DATA    DW  0210H,0403H,0605H,0807H,0A09H,0C0BH,0E0DH,1234H,5678H,1122H       
NUM     DW  10
DISP    DW  18
SOUR    DW  4000H
DEST    DW  4010H
DSEG    ENDS

CSEG    SEGMENT
        ASSUME  DS:DSEG,CS:CSEG
START:
        MOV     AX,DSEG
        MOV     DS,AX
        MOV     ES,AX
        
        MOV     CX,NUM
        LEA     SI,DATA
        MOV     DI,SOUR
        CLD
        REP     MOVSW
        
        MOV     CX,NUM
        MOV     SI,SOUR
        MOV     DI,DEST
        CMP     SI,DI
        JA      NEXT  
        
        ADD     SI,DISP
        ADD     DI,DISP  
        JMP     NEXT2
        
NEXT:   MOV     BX,[SI]           
        MOV     [DI],BX 
        INC     SI
        INC     SI
        INC     DI
        INC     DI 
        LOOP    NEXT
        JMP     END1     
        
NEXT2:  MOV     BX,[SI]           
        MOV     [DI],BX 
        DEC     SI
        DEC     SI 
        DEC     DI
        DEC     DI
        LOOP    NEXT2
        
END1:   MOV     AH,4CH
        INT     21H
CSEG    ENDS
END     START
        

7-2

DSEG    SEGMENT
DATA    DW  34,56,78    
NUM     DW  3
DISP    DW  8
SOUR    DW  4010H
DEST    DW  4020H
DSEG    ENDS

CSEG    SEGMENT
        ASSUME  DS:DSEG,CS:CSEG
START:
        MOV     AX,DSEG
        MOV     DS,AX
        MOV     ES,AX
        
        MOV     CX,NUM
        LEA     SI,DATA
        MOV     DI,SOUR
        CLD
        REP     MOVSW
        
        MOV     CX,NUM
        MOV     SI,SOUR
        MOV     DI,DEST
        
LOOP1:  MOV     AL,10
        MOV     BX,[SI]
        MUL     BH
        ADD     BL,AL
        MOV     [DI],BL
        INC     SI
        INC     SI
        INC     DI
        INC     DI
        LOOP    LOOP1
        
        MOV     AH,4CH
        INT     21H
        
CSEG    ENDS
END     START

8

DATA    SEGMENT
ARRAY   DB      55,78H,43,19,0,1,10,80H,0FFH,100  
NUM     DW      10
DEST    DW      1000H
DATA    ENDS

CODE    SEGMENT
        ASSUME  DS:DATA,CS:CODE
START:  
        MOV     AX,DATA
        MOV     DS,AX
        MOV     ES,AX
        
        MOV     AX,0
        MOV     CX,NUM
        MOV     SI,OFFSET ARRAY
        MOV     DI,DEST   
        CLD
        REP     MOVSW
        
        CALL    FIND_MIN_MAX  
        
        MOV     AL,BH
        ADD     AL,BL
        INTO
        ADC     AH,0
        SAL     AX,1      
        
        MOV     AH,4CH
        INT     21H
        
FIND_MIN_MAX    PROC
        PUSH    AX
        PUSH    CX
        PUSH    SI
        
        MOV     CX,NUM
        MOV     SI,DEST
        MOV     BH,[SI]
        MOV     BL,[SI]
        
FIND_LOOP:
        MOV     AL,[SI]
        CMP     AL,BH
        JBE     CMP_MIN
        MOV     BH,AL
        
CMP_MIN:
        CMP     AL,BL
        JAE     NEXT_ELEMENT
        MOV     BL,AL
        
NEXT_ELEMENT:
        INC     SI
        LOOP    FIND_LOOP
        
        POP     SI
        POP     CX
        POP     AX
        RET
        
FIND_MIN_MAX    ENDP  
CODE            ENDS 
END             START
        

9-1

DATA SEGMENT
NUM         DB 3FH          ;定义一个字节数据变量NUM
DATA ENDS
 
CODE SEGMENT
ASSUME      CS:CODE, DS:DATA
START:  
            MOV AX, DATA    
            MOV DS, AX      ;数据段地址放入寄存器DS
            
            MOV AL, NUM     ;将NUM中的数复制到AL中
            SHR AL, 4       ;右移4位,得到高4位
            CALL TO_ASCII   ;调用子程序,将AL中数转换为ASCII码
            
            MOV AH, 09H     ;功能号
            MOV BH, 0H      ;设置页号
            MOV BL, 0EH     ;设置颜色属性(黄色前景,黑色背景)
            MOV CX, 1       ;设置重复次数
            INT 10H         ;调用BIOS中断,打印彩色字符
            
            MOV AL, NUM
            AND AL, 0FH     ;与0FH,得到低4位
            CALL TO_ASCII   ;调用子程序,将NUM转换为ASCII码
            
            MOV AH, 02H     
            MOV DH, 0H      ;设置行号
            MOV DL, 1H      ;设置列号
            INT 10H         ;调用BIOS中断,设置光标位置
            
            MOV AH, 09H
            INT 10H         ;调用BIOS中断,打印彩色字符
 
            MOV AH, 4CH     ;返回DOS
            INT 21H
 
TO_ASCII    PROC            ;定义子程序
            CMP AL, 9       ;比较是否小于等于9
            JBE LESS_NINE   ;如果是,则跳转
            ADD AL, 7       ;如果不是,则加7,得到A~F对应的ASCII码
LESS_NINE:  ADD AL, 30H     ;加30H,得到0~9对应的ASCII码
 
            RET             ;返回主程序
TO_ASCII    ENDP            ;结束子程序
 
CODE        ENDS            ;结束代码段
 
END START                   ;结束程序

9-2

DATA    SEGMENT
ERR     DB 'ERROR!$' ;定义一个错误提示信息
DATA    ENDS
 
STACK   SEGMENT
STACK   ENDS
 
CODE    SEGMENT
        ASSUME CS:CODE, DS:DATA, SS:STACK
START:
        MOV AX, DATA            ;初始化数据段寄存器
        MOV DS, AX
        
        MOV DX, 0100H 
        MOV AH, 02H
        INT 10H                 ;将光标位置设置在1行0列
        
NEXT:   MOV AH, 08H             ;设置DOS功能调用参数
        INT 21H                 ;调用DOS中断,从键盘输入一个字符到AL中
 
        CMP AL, '#'             ;比较是否输入了'#'号
        JE FINISH               ;如果是,跳转到结束
 
        CMP AL, 'A'             ;比较是否输入了大写字母
        JB ERROR                ;如果小于'A',跳转到ERROR标签处
        CMP AL, 'Z'             ;比较是否输入了大写字母
        JA ERROR                ;如果大于'Z',跳转到ERROR标签处
        
        CMP BL, 0CEH            ;如果上一个输入错误字符则BL=0CEH
        JNE PRINT               ;没有错误提示不用清除
        CALL CLEAN              ;否则调用子程序清除错误提示
 
PRINT:  ADD AL, 20H             ;将大写字母转换为小写字母
        MOV DL, AL
    
        MOV AH, 02H             ;设置DOS功能调用参数
        INT 21H                 ;调用DOS中断,将AL中的字符输出到屏幕上
 
        JMP NEXT                ;跳转到NEXT标签处,继续输入下一个字符
 
ERROR:  
        CMP BL, 0CEH            ;如果重复出错,不重复提示
        JE NEXT
        
        MOV AH, 03H
        INT 10H                 ;获取当前光标位置
        PUSH DX                 ;保护当前光标位置
        MOV DX, 0H
        MOV AH, 02H
        INT 10H                 ;光标定位到0行0列
        
        MOV AH, 9H              ;设置DOS功能调用参数
        MOV CX, 6H
        MOV BL, 0CEH
        INT 10H
        MOV DX, OFFSET ERR      ;将错误提示信息的偏移地址存入DX寄存器
        INT 21H                 ;调用DOS中断,将DX指向的字符串输出到屏幕上
        
        POP DX
        MOV AH, 02H
        INT 10H                 ;还原光标位置
        JMP NEXT                ;跳转到NEXT标签处,继续输入下一个字符
        
CLEAN   PROC
        MOV AH, 03H
        INT 10H                 ;获取当前光标位置
        PUSH DX                 ;保护当前光标位置
        
        MOV DX, 0H
        MOV AH, 02H
        INT 10H                 ;光标定位到0行0列
        
        MOV BL, 0H
        MOV AH, 9H              
        MOV CX, 6H
        INT 10H                 ;清除ERROR
        
        POP DX
        MOV AH, 02H 
        INT 10H
        MOV AH, 02H             ;还原光标位置
        RET                     ;退出子程序
CLEAN   ENDP
 
FINISH: MOV AH, 4CH             ;返回DOS
        INT 21H
 
CODE    ENDS                    ;结束代码段
 
        END START               ;结束程序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值