鸟羽刹那吧 关注:3贴子:99

回复:建立个水楼

只看楼主收藏回复

; FILENAME: 网页链接 .486
.MODEL SMALL
.STACK 100H
.DATA
NUM DB -19, 28, 37, -46, 55, 61, -74, 255
NEG_COUNT DB 0
MAX_NUM DB 0FFH
MAX_INDEX DB 0
MSG_NEG DB 'Negative numbers count: ', 0
MSG_MAX DB 'Max number in binary: ', 0
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 统计负数个数
LEA SI, NUM
MOV CX, 8
XOR BH, BH
XOR BL, BL
COUNT_LOOP:
LODSB
TEST AL, 80H
JZ NOT_NEGATIVE
INC NEG_COUNT
NOT_NEGATIVE:
CMP AL, MAX_NUM
JB NOT_MAX
MOV MAX_NUM, AL
MOV MAX_INDEX, BL
NOT_MAX:
INC BL
LOOP COUNT_LOOP
; 显示负数个数
MOV AL, NEG_COUNT
ADD AL, 30H
MOV NEG_COUNT, AL
MOV AH, 9
LEA DX, MSG_NEG
INT 21H
MOV DL, NEG_COUNT
INT 21H
MOV DL, 10
INT 21H
MOV DL, 13
INT 21H
; 显示最大数的二进制形式
MOV AH, 9
LEA DX, MSG_MAX
INT 21H
MOV SI, MAX_INDEX
MOV AL, NUM[SI]
MOV CX, 8
PRINT_BINARY:
ROL AL, 1
MOV DL, '0'
ADC DL, 0
INT 21H
LOOP PRINT_BINARY
MOV DL, 10
INT 21H
MOV DL, 13
INT 21H
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN


IP属地:江苏来自Android客户端61楼2024-11-05 10:27
回复
    ; FILENAME: 网页链接 .486
    .MODEL SMALL
    .STACK 100H
    .DATA
    SUM DB ?,?
    MESG DB '25+9=', 0
    N1 DB 9
    N2 DB 25
    .CODE
    MAIN PROC
    MOV AX, @DATA
    MOV DS, AX
    MOV BX, OFFSET SUM
    MOV AL, N1
    ADD AL, N2
    AAA ; ASCII Adjust After Addition
    MOV [BX], AL
    MOV [BX-1], AH
    CALL CHANG
    MOV AH, 9
    MOV DX, OFFSET MESG
    INT 21H
    MOV AH, 4CH
    INT 21H
    MAIN ENDP
    CHANG PROC
    MOV SI, OFFSET SUM
    MOV AL, [SI]
    ADD AL, 30H
    MOV [SI], AL
    MOV AL, [SI-1]
    ADD AL, 30H
    MOV [SI-1], AL
    RET
    CHANG ENDP
    END MAIN


    IP属地:江苏来自Android客户端62楼2024-11-05 10:33
    回复
      2026-02-02 10:12:15
      广告
      不感兴趣
      开通SVIP免广告
      ; FILENAME: 网页链接 DATA SEGMENT USE16
      SUM DB 3 DUP('$') ; 分配3个字节的空间,用于存储结果
      MESG DB '25+9=', '$'
      N1 DB 9
      N2 DW 25
      DATA ENDS
      CODE SEGMENT USE16
      ASSUME CS:CODE, DS:DATA
      START: MOV AX, DATA
      MOV DS, AX
      MOV AH, N1
      MOV AL, N2
      ADD AH, AL
      MOV BX, OFFSET SUM
      MOV [BX], AH
      MOV DX, OFFSET MESG
      MOV AH, 09H
      INT 21H
      MOV AH, 4CH
      INT 21H
      ; 将二进制数转换为ASCII码并显示
      CONV: PROC
      MOV BX, OFFSET SUM
      MOV CX, 10
      MOV DX, 0
      MOV AX, [BX]
      DIV CX
      ADD DL, '0'
      MOV [BX+1], DL
      MOV AX, 0
      MOV DX, 0
      MOV AX, [BX]
      DIV CX
      ADD AL, '0'
      MOV [BX], AL
      RET
      CONV ENDP
      CODE ENDS
      END START


      IP属地:江苏来自Android客户端63楼2024-11-05 10:36
      回复
        ; FILENAME: 网页链接 .486
        .MODEL SMALL
        .STACK 100H
        .DATA
        PASSWORD DB 'secret', 0 ; 预设密码
        USER_INPUT DB 7, 0, 7 DUP(0) ; 用户输入缓冲区,7为最大长度,0为实际长度,后面跟实际输入
        WELCOME_MSG DB 'Welcome!', 13, 10, '$' ; 欢迎消息
        PROMPT_MSG DB 'PASSWORD:', 13, 10, '$' ; 密码提示消息
        INCORRECT_MSG DB 'Incorrect password. Try again.', 13, 10, '$' ; 密码错误消息
        .CODE
        MAIN PROC
        MOV AX, @DATA
        MOV DS, AX
        MOV ES, AX
        START:
        ; 显示密码提示消息
        MOV AH, 9
        LEA DX, PROMPT_MSG
        INT 21H
        ; 获取用户输入的密码
        LEA DX, USER_INPUT
        MOV AH, 0Ah
        INT 21H
        ; 显示星号代替实际输入
        MOV SI, OFFSET USER_INPUT + 1 ; 指向实际输入的长度
        MOV CL, [SI] ; 获取实际输入的长度
        MOV CH, 0
        ADD SI, 2 ; 跳过长度字节
        MOV BL, '*'
        MOV CX, [SI-1]
        DISPLAY_LOOP:
        MOV DL, BL
        MOV AH, 2
        INT 21H
        LOOP DISPLAY_LOOP
        ; 比较用户输入和预设密码
        LEA SI, PASSWORD
        LEA DI, USER_INPUT + 2 ; 跳过长度字节
        MOV CX, [USER_INPUT + 1] ; 用户输入的实际长度
        REPE CMPSB ; 逐字节比较直到不相等或CX为0
        JNE PASSWORD_INCORRECT ; 如果不匹配,跳转到错误处理
        ; 密码正确,显示欢迎消息并退出
        MOV AH, 9
        LEA DX, WELCOME_MSG
        INT 21H
        MOV AH, 4CH
        INT 21H
        PASSWORD_INCORRECT:
        ; 密码错误,显示错误消息并重试
        MOV AH, 9
        LEA DX, INCORRECT_MSG
        INT 21H
        JMP START ; 返回开始处重新尝试
        MAIN ENDP
        END MAIN


        IP属地:江苏来自Android客户端64楼2024-11-12 09:46
        回复
          ; FILENAME: 网页链接 .model small
          .stack 100h
          .data
          PASSWORD db 'pass123', 0 ; 预设密码
          USER_INPUT db 8, 0, 8 dup(0) ; 用户输入缓冲区,8为最大长度+1,0为实际长度,后面跟实际输入
          WELCOME_MSG db 'Welcome!', 0dh, 0ah, '$' ; 欢迎消息
          INCORRECT_MSG db 'Incorrect password. Try again.', 0dh, 0ah, '$' ; 密码错误消息
          PROMPT_MSG db 'PASSWORD:', 0dh, 0ah, '$' ; 密码提示消息
          .code
          main proc
          mov ax, @data
          mov ds, ax
          start:
          ; 显示密码提示
          lea dx, PROMPT_MSG
          mov ah, 9
          int 21h
          ; 获取用户输入
          lea dx, USER_INPUT
          mov ah, 0Ah
          int 21h
          ; 显示星号代替实际输入
          mov cx, [USER_INPUT + 1] ; 用户输入的实际长度
          mov bx, offset USER_INPUT + 2 ; 用户输入的起始位置
          display_loop:
          mov dl, '*'
          mov ah, 2
          int 21h
          loop display_loop
          ; 比较密码
          lea si, PASSWORD
          lea di, USER_INPUT + 2
          mov cx, [USER_INPUT + 1]
          repe cmpsb
          jne password_incorrect
          ; 密码正确,显示欢迎消息并返回DOS
          lea dx, WELCOME_MSG
          mov ah, 9
          int 21h
          mov ax, 4C00h
          int 21h
          password_incorrect:
          ; 密码错误,显示错误消息并重试
          lea dx, INCORRECT_MSG
          mov ah, 9
          int 21h
          jmp start
          main endp
          end main


          IP属地:江苏来自Android客户端65楼2024-11-12 09:55
          回复
            ; 用户登录验证程序
            .model small
            .stack 100h
            .data
            PASSWORD db 'pass123$', 0 ; 预设密码
            USER_INPUT db 8 dup(0) ; 用户输入缓冲区
            WELCOME_MSG db 'Welcome!$', ; 欢迎消息
            INCORRECT_MSG db 'Incorrect password. Try again.$', ; 密码错误消息
            PROMPT_MSG db 'PASSWORD:$' ; 密码提示消息
            .code
            main proc
            mov ax, @data
            mov ds, ax
            start:
            ; 显示密码提示
            lea dx, PROMPT_MSG
            call print_string
            ; 获取用户输入
            lea si, USER_INPUT
            call get_password
            ; 比较密码
            lea di, PASSWORD
            call compare_strings
            jc password_correct
            ; 密码错误,显示错误消息并重试
            lea dx, INCORRECT_MSG
            call print_string
            jmp start
            password_correct:
            ; 密码正确,显示欢迎消息并返回DOS
            lea dx, WELCOME_MSG
            call print_string
            ; 返回DOS
            mov ah, 4Ch
            int 21h
            main endp
            ; 打印字符串
            print_string proc
            mov ah, 9
            int 21h
            ret
            print_string endp
            ; 获取密码输入
            get_password proc
            mov cx, 8 ; 最大输入长度
            xor bx, bx ; 输入字符计数器
            input_loop:
            mov ah, 08h ; 读取字符不回显
            int 21h
            cmp al, 0Dh ; 检查是否为回车键
            je end_input
            cmp al, 08h ; 检查是否为退格键
            je backspace
            cmp bx, cx ; 检查是否达到最大长度
            je input_loop
            mov [si + bx], al ; 存储输入字符
            inc bx ; 增加计数器
            mov dl, '*' ; 显示星号
            mov ah, 02h ; 显示字符
            int 21h
            jmp input_loop
            backspace:
            cmp bx, 0 ; 检查是否已经没有字符
            je input_loop
            dec bx ; 减少计数器
            mov dl, 08h ; 发送退格符
            mov ah, 02h
            int 21h
            mov dl, ' ' ; 清除最后一个星号
            mov ah, 02h
            int 21h
            mov dl, 08h ; 再次发送退格符
            mov ah, 02h
            int 2


            IP属地:江苏来自Android客户端66楼2024-11-12 10:12
            回复
              ; 用户登录验证程序
              .model small
              .stack 100h
              .data
              PASSWORD db 'pass123$', 0 ; 预设密码
              USER_INPUT db 8 dup(0) ; 用户输入缓冲区
              WELCOME_MSG db 'Welcome!$', ; 欢迎消息
              INCORRECT_MSG db 'Incorrect password. Try again.$', ; 密码错误消息
              PROMPT_MSG db 'PASSWORD:$' ; 密码提示消息
              .code
              main proc
              mov ax, @data
              mov ds, ax
              start:
              ; 显示密码提示
              lea dx, PROMPT_MSG
              call print_string
              ; 获取用户输入
              lea si, USER_INPUT
              call get_password
              ; 比较密码
              lea di, PASSWORD
              call compare_strings
              jc password_correct
              ; 密码错误,显示错误消息并重试
              lea dx, INCORRECT_MSG
              call print_string
              jmp start
              password_correct:
              ; 密码正确,显示欢迎消息并返回DOS
              lea dx, WELCOME_MSG
              call print_string
              ; 返回DOS
              mov ah, 4Ch
              int 21h
              main endp
              ; 打印字符串
              print_string proc
              mov ah, 9
              int 21h
              ret
              print_string endp
              ; 获取密码输入
              get_password proc
              mov cx, 8 ; 最大输入长度
              xor bx, bx ; 输入字符计数器
              input_loop:
              mov ah, 08h ; 读取字符不回显
              int 21h
              cmp al, 0Dh ; 检查是否为回车键
              je end_input
              cmp al, 08h ; 检查是否为退格键
              je backspace
              cmp bx, cx ; 检查是否达到最大长度
              je input_loop
              mov [si + bx], al ; 存储输入字符
              inc bx ; 增加计数器
              mov dl, '*' ; 显示星号
              mov ah, 02h ; 显示字符
              int 21h
              jmp input_loop
              backspace:
              cmp bx, 0 ; 检查是否已经没有字符
              je input_loop
              dec bx ; 减少计数器
              mov dl, 08h ; 发送退格符
              mov ah, 02h
              int 21h
              mov dl, ' ' ; 清除最后一个星号
              mov ah, 02h
              int 21h
              mov dl, 08h ; 再次发送退格符
              mov ah, 02h
              int 21h
              jmp input_loop
              end_input:
              ret
              get_password endp
              ; 比较字符串
              compare_strings proc
              mov cx, bx ; 设置循环次数
              repe cmpsb ; 比较字符串
              setz al ; 如果相等,设置AL=1
              ret
              compare_strings endp
              end main


              IP属地:江苏来自Android客户端67楼2024-11-12 10:14
              回复
                .586
                DATA SEGMENT USE16
                MESG1 DB 'INPUT YOUR USERNAME: $';提示字符
                MESG2 DB 'INPUT YOUR PASSWORD: $'
                ERROR DB '-----USERNAME OR PASSWORD ERROR!----$'
                WELCOME DB '---------------WELCOME!-------------$'
                _USERNAME DB 'root'
                _PASSWORD DB 'root'
                _ULEN EQU $-_USERNAME ; 用户名长度
                _PLEN EQU $-_PASSWORD ; 密码长度
                USERNAME DB15 ; 输入的用户名
                PASSWORD DB 15 DUP(?) ; 输入的密码
                PLEN DB 0 ; 输入密码的长度
                DATA ENDS
                CODE SEGMENT USE16
                ASSUME CS: CODE, DS: DATA
                BEG: MOV AX, DATA
                MOV DS, AX
                NEXT0: MOV AH, 9 ;09H功能号,显示DS:DL内字符串
                MOV DX, OFFSET MESG1
                INT 21H
                MOV AH, 0AH ;键盘输入字符串并显示,存在U缓冲区
                MOV DX, OFFSET USERNAME ;用户输入字符串起始偏移位置放入DX缓冲区
                INT 21H
                MOV AH, 2
                MOV DL, 0AH ;换行字符
                INT 21H
                MOV AH, 9 ;显示提示字符串
                MOV DX, OFFSET MESG2
                INT 21H
                MOV CX, _PLEN
                MOV SI, OFFSET PASSWORD ;把输入密码起始偏移地址放入SI
                NEXT1: MOV AH, 07H ;无回显从键盘读入一个字符
                INT 21H
                CMP AL, 0DH ;判断输入是否结束
                JE IND
                MOV [SI], AL ;将输入密码字符放入数据区:PWD
                MOV AH, 2 ;每输入一位密码显示一个‘*’
                MOV DL, '*'
                INT 21H
                INC PLEN
                INC SI
                JMP NEXT1
                IND: MOV AH, 2 ;输出换行
                MOV DL, 0AH
                INT 21H
                MOV BX, OFFSET USERNAME+1 ;[BX]=实际输入字符数
                MOV AL, [BX]
                CMP AL, _ULEN ;比较用户名长度
                MOV BX, OFFSET _USERNAME
                MOV SI, OFFSET _USERNAME+2
                MOV CX, _ULEN ;设置循环次数
                NEXT2: MOV AL, [BX]
                CMP [SI], AL ;循环比较用户名是否正确
                INC SI
                INC BX
                LOOP NEXT2
                MOV BX, OFFSET _PASSWORD
                MOV SI, OFFSET PASSWORD
                MOV CL, PLEN
                MOV CH, 0
                CMP CX, _PLEN ;比较密码长度
                JNZ ERR
                MOV CX, _PLEN
                NEXT3: MOV AL, [BX]
                CMP [SI],


                IP属地:江苏来自Android客户端68楼2024-11-12 10:19
                回复
                  2026-02-02 10:06:15
                  广告
                  不感兴趣
                  开通SVIP免广告
                  CMP [SI], AL ;循环比较密码字符是否正确
                  JNZ ERR
                  INC SI
                  INC BX
                  LOOP NEXT3
                  JMP WEL
                  ERR: MOV AH, 9
                  MOV DX, OFFSET ERROR ;输出用户名或密码错误提示
                  INT 21H
                  MOV AH, 2
                  MOV DL, 0AH
                  INT 21H
                  JMP NEXT0
                  WEL: MOV AH, 9 ;输出登录成功的提示
                  MOV DX, OFFSET WELCOME
                  INT 21H
                  JMP EXIT
                  EXIT: MOV AH, 4CH
                  INT 21H
                  CODE ENDS
                  END BEG


                  IP属地:江苏来自Android客户端69楼2024-11-12 10:21
                  回复
                    .MODEL SMALL
                    .STACK 100H
                    .DATA
                    PASSWORD DB '123456', '$' ; 这里设定内定密码,可按需修改
                    INPUT_PASSWORD DB 100 DUP('$')
                    PROMPT_MSG DB 'PASSWORD:$'
                    CORRECT_MSG DB 'Welcome!$'
                    ERROR_MSG DB 'Incorrect password. Try again.$'
                    .CODE
                    MAIN PROC
                    MOV AX, @DATA
                    MOV DS, AX
                    INPUT_LOOP:
                    MOV AH, 9
                    LEA DX, PROMPT_MSG
                    INT 21H
                    MOV CX, 0
                    MOV SI, 0
                    INPUT_PASSWORD_LOOP:
                    MOV AH, 7 ; 使用功能7来获取输入字符且不回显
                    INT 21H
                    CMP AL, 13 ; 回车键的ASCII码为13,判断是否按下回车键
                    JE CHECK_PASSWORD
                    MOV INPUT_PASSWORD[SI], AL
                    MOV AH, 2
                    MOV DL, '*'
                    INT 21H
                    INC SI
                    INC CX
                    JMP INPUT_PASSWORD_LOOP
                    CHECK_PASSWORD:
                    MOV SI, 0
                    MOV CX, 6 ; 这里假设密码长度为6,可根据实际设定修改
                    PASSWORD_CHECK_LOOP:
                    MOV AL, INPUT_PASSWORD[SI]
                    CMP AL, PASSWORD[SI]
                    JNE PASSWORD_ERROR
                    INC SI
                    LOOP PASSWORD_CHECK_LOOP
                    MOV AH, 9
                    LEA DX, CORRECT_MSG
                    INT 21H
                    JMP END_PROGRAM
                    PASSWORD_ERROR:
                    MOV AH, 9
                    LEA DX, ERROR_MSG
                    INT 21H
                    MOV CX, 0
                    MOV SI, 0
                    MOV INPUT_PASSWORD, '$'
                    JMP INPUT_LOOP
                    END_PROGRAM:
                    MOV AH, 4CH
                    INT 21H
                    MAIN ENDP
                    END MAIN


                    IP属地:江苏来自Android客户端70楼2024-11-12 10:50
                    回复
                      1


                      IP属地:江苏来自Android客户端71楼2024-11-29 12:49
                      回复
                        实验程序举例
                        .486
                        CODE SEGMENT USE16
                        ASSUME CS:CODE
                        BEG: JMP START
                        CCONPORT EQU 213H
                        CCONBIT1 EQU 00010110B
                        CCONBIT2 EQU 01010110B
                        CCONBIT3 EQU 10010110B
                        CDPORT1 EQU 210H
                        CDPORT2 EQU 211H
                        CDPORT3 EQU 212H
                        CHDBIT1 EQU 00H
                        CHDBIT2 EQU 00H
                        CHDBIT3 EQU 00H


                        IP属地:江苏来自Android客户端72楼2024-12-10 09:42
                        回复
                          START: NOP ;启动延时
                          MOV DX,CCONPORT ;写入控制字(计数器0)
                          MOV AL,CCONBIT1
                          OUT DX,AL
                          MOV DX,CDPORT1 ;写入初值(计数器0)
                          MOV AL,CHDBIT1
                          OUT DX,AL
                          MOV DX,CCONPORT ;写入控制字(计数器1)
                          MOV AL,CCONBIT2
                          OUT DX,AL
                          MOV DX,CDPORT2 ;写入初值(计数器1)
                          MOV AL,CHDBIT2
                          OUT DX,AL


                          IP属地:江苏来自Android客户端73楼2024-12-10 09:42
                          回复
                            MOV DX,CCONPORT ;写入控制字(计数器2)
                            MOV AL,CCONBIT3
                            OUT DX,AL
                            MOV DX,CDPORT3 ;写入初值(计数器2)
                            MOV AL,CHDBIT3
                            OUT DX,AL
                            WT: NOP
                            JMP WT
                            CODE ENDS
                            END BEG


                            IP属地:江苏来自Android客户端74楼2024-12-10 09:43
                            回复
                              2026-02-02 10:00:15
                              广告
                              不感兴趣
                              开通SVIP免广告
                              1


                              IP属地:江苏来自Android客户端75楼2024-12-13 23:47
                              回复