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

回复:建立个水楼

取消只看楼主收藏回复

1


IP属地:江苏来自Android客户端54楼2024-09-20 08:46
回复
    1


    IP属地:江苏来自Android客户端55楼2024-09-20 08:47
    回复
      2026-02-02 13:38:44
      广告
      不感兴趣
      开通SVIP免广告
      1


      IP属地:江苏来自Android客户端56楼2024-10-05 08:19
      回复
        1


        IP属地:江苏来自Android客户端57楼2024-10-20 23:17
        回复
          1


          IP属地:江苏来自Android客户端58楼2024-10-31 08:06
          回复
            实验一 汇编语言语法练习与代码转换
            排除语法错误 下面给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据MASM给出的错误信息对源程序进行修改,直到没有语法错误为止。然后进行链接,并执行相应的可执行文件。正确的执行结果是在屏幕上显示25+9=34。
            【程序清单】
            ;FILENAME:网页链接 .486
            DATA SEGMENT USE16
            SUM DB ?,?,
            MESG DB ‘25+9=’
            DB 0,0
            N1 DB 9,F0H
            N2 DW 25
            DATA ENDS
            CODE SEGMENT USE16
            ASSUME CS:CODE,DS:DATA
            BEG: MOV AX, DATA
            MOV DS, AX
            MOV BX, OFFSET SUM
            MOV AH, N1
            MOV AL, N2
            ADD AH, AL
            MOV [BX], AH
            CALL CHANG
            MOV AH, 9
            MOV DX, OFFSET MEST
            INT 21H
            MOV AH, 4CH
            INT 21H
            CHANG: PROC
            LAST: CMP [BX], 10
            JC NEXT
            SUB [BX], 10
            INC [BX+7]
            JMP LAST
            NEXT: ADD [BX+8], SUM
            ADD [BX+7], 30H
            ADD [BX+8], 30H
            RET
            CHANG: ENDP
            CODE ENDS
            END BEG
            2、统计负数的个数,并求最大数。
            设数据段有8个有符号数:
            NUM DB -19,+28,37,-46,+55,61,-74,+255
            请设计一个程序完成(1)统计并显示负数的个数
            (2)找出真值最大的数,并以二进制的形式显示在屏幕上。
            要求:统一提交实验报告的文档的电子版,文档中需将实验结果的截屏附上。


            IP属地:江苏来自Android客户端59楼2024-11-05 09:55
            回复
              ; FILENAME: 网页链接 .486
              DATA SEGMENT USE16
              SUM DW ?, ?
              MESG DB '25+9=', '$'
              N1 DB 9
              N2 DW 25
              DATA ENDS
              CODE SEGMENT USE16
              ASSUME CS:CODE, DS:DATA
              BEG: MOV AX, DATA
              MOV DS, AX
              MOV BX, OFFSET SUM
              MOV AH, N1
              MOV AL, N2
              ADD AH, AL
              MOV [BX], AH
              MOV AH, 9
              MOV DX, OFFSET MESG
              MOV AH, 09H
              INT 21H
              MOV AH, 4CH
              INT 21H
              CHANG: PROC
              MOV CX, 0
              MOV DX, 0
              MOV BX, OFFSET SUM
              MOV AX, [BX]
              MOV BX, OFFSET SUM+1
              MOV DX, [BX]
              ADD AX, DX
              MOV [BX], AX
              MOV AX, 0
              MOV BX, OFFSET SUM
              MOV DX, [BX]
              MOV AX, 0
              MOV CX, 10
              CMP DX, 10
              JC NEXT
              SUB DX, 10
              INC AX
              MOV [BX+1], AX
              JMP LAST
              NEXT: ADD DX, '0'
              MOV [BX], DL
              LAST: RET
              CHANG ENDP
              CODE ENDS
              END BEG


              IP属地:江苏来自Android客户端60楼2024-11-05 10:02
              回复
                ; 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
                回复
                  2026-02-02 13:32:44
                  广告
                  不感兴趣
                  开通SVIP免广告
                  ; 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
                  回复
                    ; 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
                            回复
                              2026-02-02 13:26:44
                              广告
                              不感兴趣
                              开通SVIP免广告
                              .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
                              回复