博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几道汇编入门题目(二)
阅读量:4320 次
发布时间:2019-06-06

本文共 4848 字,大约阅读时间需要 16 分钟。

继上次的三道汇编编程练习,本篇博客同样会介绍三道汇编相关编程题目

 


 

1 用汇编语言编写一个子程序,根据入口参数AL为0、1、2,分别实现大写字母转换为小写, 小写字母转换成大写或大小写字母互换。然后再编写主程序,通过调用该子程序把键盘输入 的字符串mystring(长度不超过20Byte)作相应转换(具体何种转换可以让用户通过键盘 输入来选择),并输出到屏幕显示。

 

Solution Code:

data segment    buffer     db 81            db 0            db 81 dup('$')endsstack segment            dw    128    dup(0)endscode segmentassume CS:code, DS:datamain proc far            mov ax, data            mov ds, ax            mov es, ax            mov ah, 0ah            mov dx, seg buffer            mov ds, dx            lea dx, buffer            int 21hgetkey:     mov ah, 1            int 21h            lea bx, buffer+2    ;input string            mov ch, 0            mov cl, buffer+1            call func             ;call function            lea dx, buffer+2    ;output string            mov ah, 09h            int 21h            mov ax, 4c00h            int 21hmain endpfunc proc neareach:            cmp al, '0'            je func0            cmp al, '1'            je func1            cmp al, '2'            je func2func0:            cmp [bx], 'Z'    ;Judge whether not abc            jle endf            sub [bx], 32            jmp endffunc1:            cmp [bx], 'a'    ;Jedge whether not ABC            jge endf            add [bx], 32            jmp endffunc2:            cmp [bx], 'Z'            jg func0            jmp func1endf:            inc bx            loop each            retfunc endpendsend main

2 用汇编语言编写一个子程序,把一个16位二进制数用十六进制形式在屏幕上显示出来,分别运用如下3种参数传递方法,并用一个主程序验证它。(1)    采用AX寄存器传递这个16位二进制数;(2)    采用wordTEMP变量传递这个16位二进制数;(3)    采用堆栈方法传递这个16位二进制数。

 

其中第二小题没有写正确,先传上来吧 :(

 

data segment    dig dw 1010100110100011B, '$'    tmpdig db 00, 00, 00, 00, '$'    displayword db "     $"    pkey db "press any key...$"endsstack segment    dw 128 dup(0)endscode segmentmain proc far    mov ax, data    mov ds, ax    mov es, ax    mov ax, dig    call axtr        ;by register AX        lea dx, displayword    mov ah, 9    int 21h    call wordtmp    ;by variable wordtmp        lea dx, displayword    mov ah, 9    int 21h    mov ax, dig    push ax    mov ax, 0    call bystack    ;by stack method    mov ax, 4c00h    int 21hmain endpaxtr proc near    mov cx, 4    mov si, 3funcax:    mov bx, ax    and bx, 000Fh    cmp bx, 0009h    ;just cmp the last bit    jg axchar        ;jmp to axchar if it's char    add bx, 30h        ;for ascll adjust    jmp axsolveaxchar:    add bx, 37haxsolve:    mov dx, bx    lea bx, tmpdig    mov [bx+si], dl    ;store current bit result    shr ax, 4    dec si    loop funcax    lea dx, tmpdig    ;display    mov ah, 9    int 21h    retaxtr endpwordtmp proc near    mov ax, dig    mov cx, 4    mov si, 3op2:    mov bx, ax    and bx, 000Fh    cmp bx, 0009h    ja gcc3    add bx, 30h    jmp gcc4gcc3:    add bx, 37hgcc4:    mov dx, bx    lea bx, tmpdig    mov [bx+si], dl    shr ax, 4    dec si    loop op2    lea dx, tmpdig    mov ah, 9    int 21h    retwordtmp endpbystack proc near        push bp    mov bp, sp    mov ax, [bp+4]    mov cx, 4    mov si, 3funcstack:    mov bx, ax    and bx, 000Fh    cmp bx, 0009h    jg stackchar    add bx, 30h    jmp stacksolvestackchar:    add bx, 37hstacksolve:    mov dx, bx    lea bx, tmpdig    mov [bx+si], dl    shr ax, 4    dec si    loop funcstack    lea dx, tmpdig    mov ah, 9    int 21h    pop bp    retbystack endpendsend main

3 设数据段事先定义了一个数组存放着30位学生的成绩(0~100), 编写子程序,统计0~59分,60~69分,70~79分,80~89分,90~100分的人数, 编写主程序在屏幕上输出等级和所对应人数,例如:A:2    B:11   C:13   D:3    E:1

 

本题还没有写完,先传上来吧 :(

 

data segment    rst db 56, 69, 84, 82, 73, 88, 99, 63, 100, 80, '$'    se db 0, '$'    sd db 0, '$'    sc db 0, '$'    sb db 0, '$'    sa db 0, '$'data endscode segment     assume cs:code, ds:datastart:    mov ax, data    mov dx, ax    lea si, rst    mov cx, 10    ;lea bx, se    ;add [bx], 1;    ;mov ax, [bx];    ;add ax, 30h    ;mov ah, 02H    ;mov dl, al    ;int 21hlop1:    cmp [si], 60    ;cmp byte ptr [si], 60    jb five    cmp [si], 70    ;cmp byte ptr [si], 70    jb six    cmp [si], 80    ;cmp byte ptr [si], 80    jb seven    cmp [si], 90    ;cmp byte ptr [si], 90    jb eight    jmp ninefive:    lea bx, se    add [bx], 1;    jmp lopsix:    lea bx, sd    add [bx], 1;    jmp lopseven:    lea bx, sc    add [bx], 1;    jmp lopeight:    lea bx, sb    add [bx], 1;    jmp lopnine:    lea bx, sb    add [bx], 1;    jmp loplop:    inc si    loop lop1display:    lea bx, se    add [bx], 30h    mov ah, 02H    mov dl, [bx]    int 21h    lea bx, sd    add [bx], 30h    mov ah, 02H    mov dl, [bx]    int 21h    lea bx, sc    add [bx], 30h    mov ah, 02H    mov dl, [bx]    int 21h    lea bx, sb    add [bx], 30h    mov ah, 02H    mov dl, [bx]    int 21h    lea bx, sa    add [bx], 30h    mov ah, 02H    mov dl, [bx]    int 21h    mov ah, 02H    mov dl, '$'    int 21hexit:    mov ah, 4ch    int 21hcode ends    end start

 

转载于:https://www.cnblogs.com/wushuaiyi/p/4576344.html

你可能感兴趣的文章
修改jq weui自定义对话框点击确定按钮不关闭对话框
查看>>
Js单元测试-分块延迟加载
查看>>
牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)
查看>>
(转)AS3 面相对象 高级话题
查看>>
Missile
查看>>
关于kindedit和 Uedit后者兼容前者
查看>>
微软BI 之SSIS 系列 - 利用 SSIS 模板快速开发 SSIS Package
查看>>
eclipse中使用git上传到githup,报401 Authorization Required
查看>>
基于Golang打造一款开源的WAF网关
查看>>
POJ 2955 Brackets
查看>>
Python: execute an external program (zz)
查看>>
在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)
查看>>
Ubuntu14.04安装JDK
查看>>
Latex 公式换行问题(换行,等号对齐)
查看>>
php mysqli解决乱码
查看>>
VC Q&A (原创)
查看>>
linux命令
查看>>
多线程(一)NSThread
查看>>
POJ 2584 T-Shirt Gumbo
查看>>
闭包2
查看>>